Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

Swift

combineの簡単な例

PassthroughSubject と CurrentValueSubject を使ってみた。おおよそRxSwift的に使えると思った。 func test() -> Void { let pub = PassthroughSubject<Int, Error>() _ = pub .sink(receiveCompletion: { _ in }) { value in print("new val -> \(value)") } pub.send(</int,>…

Codable

参照 Codableについて色々まとめた[Swift4] - Qiita Codableで色々なJSONに対応する - Qiita Swift4のCodableでフラットなJSONからネストしたオブジェクトにデコードする - Qiita Codableのinit(from:)をどう書くか / 20170621 #wwdc_ebisu // Speaker Deck …

ビットフラグ

ビットフラグはOpsionSetを定義すると使える。 struct Hoge : OptionSet { let rawValue : Int static let a = Hoge(rawValue: 0b0001) static let b = Hoge(rawValue: 0b0010) static let c = Hoge(rawValue: 0b0100) static let all:Hoge = [.a, .b, .c] s…

数字形式とか

3桁区切り let nf = NumberFormatter() nf.numberStyle = .decimal nf.groupingSeparator = "," nf.groupingSize = 3 let str = nf.string(from: NSNumber(integerLiteral: self))

デバッグ

面白い。 Dancing in the Debugger — A Waltz with LLDB · objc.io

Matrix

Swiftで行列を作ってみた。一応掛け算できる。 Matrix swift

正規表現

正規表現を久しぶりに使ったのでメソッドをはやしてみた。

コマンドライン

参考 yamaimo.hatenablog.jp コンパイルする場合はswiftcを使う。 $ swiftc -help OVERVIEW: Swift compiler USAGE: swiftc [options] <inputs> MODES: -dump-ast Parse and type-check input file(s) and dump AST(s) -dump-parse Parse input file(s) and dump AST</inputs>…

画像

画像処理のコードを書いた。CFDataがNSDataのブリッジなことに気づかなかった..。 RDImageAnalyzeSwift

文字列ストリーム風

以下でStream(Array(src.characters))としてやれば文字列stream風になる。 class Stream<T> { let m_value:[T] var count = 0 init(_ v:[T]) { m_value = v } func get()->T? { if count < m_value.count { let ret = m_value[count] count = count + 1 print("</t>…

GCDの例

SwiftでGCDのgroup等の使い方のサンプルを書いてみた。 // // ViewController.swift // GCDSample // // Created by KatagiriSo on 2017/09/19. // Copyright © 2017年 RodhosSoft. All rights reserved. // import UIKit class ViewController: UIViewContr…

型を消す

親クラスはジェネリクスをもたない。メソッドがジェネリクスになっている。 子クラスはジェネリクスになっている。書いてみた。実行時エラーになるのはいやだ。。 import Foundation class A { let b:B init<T>(_ v:T) { self.b = C(v) } /// 問題点 なんでも良</t>…

メソッド交換

デバッグではまったのでメソッドの交換を試してみた。以下はそのコード。 extension CLLocationManager { func my_requestWhenInUseAuthorization() { print("requestWhenInUseAuthorization") } func my_requestAlwaysAuthorization() { print("requestAlwa…

2分木

2分木らしきものを作った。あっているかはさておき。 import Foundation class N { static var count:Int = 0 var identifier:Int = 0 var v:Int = 0 var small:N? = nil var big:N? = nil func add(_ n:N) { if self.v > n.v { if let small = self.small {…

RDRepository

API呼び出しでJSON分解するSwiftコードの試作をRDRepositoryとしてgithubにあげた。 キャッシュを期限付きで管理するRDCacheが肝になる。 一つのタスクをOperationを使って実行している。 サンプルとしてこれを利用したWikipedia情報の呼び出しを書いた。 他…

swiftc

Swiftをコマンドラインでコンパイルする方法swiftcを使う。 which swiftc /usr/bin/swiftc 適当にswiftでコードを書いて、 import Foundation print("hello, world!") ここではmain.swiftという名前にした。 swiftc main.swift これで、mainという実行ファイ…

ファントム型

qiita.comまねて書いてみた。何かに使える気がする。 phantom type dummy code

URLSessionConfigurationのメモ

URLSessionConfigurationのメモこちらに良い記事があった。 qiita.com とりあえずメソッド一覧。あとから説明を追記する形で。 open class URLSessionConfiguration : NSObject, NSCopying { // デフォルト open class var `default`: URLSessionConfigurati…

プロトコルMisc

CustomStringConvertible description オブジェクトの文字表示 print CustomDebugStringConvertible debugDescription オブジェクトの文字表示 debugPrint LosslessStringConvertible 文字列からそのままオブジェクト構築できる TextOutputStream write(_ st…

乱数

let x = arc4random() % 5 let x = arc4random_uniform(5) seed指定いらない。

BehaviorSubject

BehaviorSubjectは最後の値を覚えていてsubscribeで即座に値が返ってくる。最初の値はこちらで指定できる。 class Temperature { private let behaviorSubject = BehaviorSubject(value:0) var behavior : BehaviorSubject<Int> { return behaviorSubject } func </int>…

Observable

次のようなクラスを定義する。 class Temperature { private let eventSubject = PublishSubject<Int>() var event: Observable<Int> { return eventSubject } func doSomething(x:Int) { eventSubject.onNext(x) } } テキストフィールドの編集が終わったタイミングで</int></int>…

RXSwift

RxSwiftを試してみた。CocoaPodでインストールした上で以下をインポート import RxSwift import RxCocoa 使い方は textFiled!.rx.text .map { guard let text = $0, text.lengthOfBytes(using:.utf16) > 0 else { return "" } return "\(text)!" } .bindTo(l…

マルチスレッドのデザインパターン

以下を参照しつつマルチスレッドのデザインパターンを概観し、適宜Swiftでの実装を考える。 Single Threaded Execution (同時にできない) クリティカルセクション。 Immutable (不変) Guarded Suspension (用意できるまで待つ) Balking (用意できないならや…

Swift落穂ひろい プトロコル準拠

Swiftで少しわかりにくかった所を整理しておきます。Swift3です。 二つのプロトコル準拠 複数のプロトコル準拠な変数宣言に&を使います。 let animal3:Animal & Helloable = seri Switch文で特定の型に対して protocol Animal { } protocol Helloable { func…

プロトコル指向の例

WWDC2015から developer.apple.com重要だが未消化なのであとで感想を追記したい。

プロトコル指向+値型なコーディング

WWW2016におけるコーディングの指針developer.apple.comモデルは値型に Viewのレイアウト調整はプロトコルとジェネリクスを使ってUIViewから独立なクラスを作ると単体テストできる。 Controllerの状態はenum一つにまとめる。モデルの更新を通知してコントロ…

値型

WWDC2015においてSwiftでは参照より値型を用いることを推奨している。Building Better Apps with Value Types in Swift - WWDC 2015 - Videos - Apple Developer参照型を混ぜる際にはgetにmutatingをつけてコピーして渡すようにする。 isUniquelyReferenceNo…