RxSwift は ReactiveX の Swift 実装.
event
: Stream に流れるイベント. 値、 error, complated のどれか.- Observer:
on(event:)
を持っている = event を流せる. - Observable:
subscribe(observer:) -> Disposable
を持っている = event を受け取れる/ - Subject: Observer + Observable
- PublishSubject: subscribe してから発生した event を受け取れる
- ReplaySubject: subscribe 以前に発生した event も受け取れる. バッファサイズを指定する.
- BehaviorSubject: 一つ過去の event を受け取れる. 初期値が必要.
- Trants: Observable のラッパーで便利なものが用意されている.
- Single: 値 か error のイベントが一回だけ発生する.
- Completable: complate か error のイベントが一回だけ発生する.
- Maybe: (complate か 値) または error が一回だけ流れる.
イベントが発生する側は Subject
をインスタンス化して、外部へは Observable
の形で公開するのが基本.
Cocoa 特有の領域に関する機能.
- PublishRelay:
PublishSubject
のラッパーだが error と completed が発生しない. - BehaviourRelay:
BehaviorSubject
のラッパーだが error と completed が発生しない. - Signal: エラーが発生しない, main スレッドで実行, subscribe してから発生した event を受け取れる.
- Driver: エラーが発生しない, main スレッドで実行, 一つ前の event を受け取れる.
- ControlEvent: エラーが発生しない, main スレッドで実行, メモリ割り当て開放時に complete が発生, subscribe してから発生した event を受け取れる.
- ControlProperty: エラーが発生しない, main スレッドで実行, メモリ割り当て開放時に complete が発生, 一つ過去の event を受け取れる. 初期値が必要.
- Binder: エラーイベントを処理しない, 指定した Scheduler (デフォルトは main) で実行.
bind(to:)
で bind 可能になる.
Model <-> ViewModel <-> View
で構成されるアーキテクチャ. ここでいう View には iOS の UIViewController が含まれます.
- Model に対する操作(ビジネスロジック)は
retuen void
な関数 - 操作の結果は Observable で伝搬させる
- Model と View の橋渡し役で表示に関わる処理 (プレゼンテーションロジック)を書く
- Model のどの要素が UI のどの要素にマッピングされるか
- UI のどのイベントが Model のどの操作にマッピングされるか
- UI のレイアウトなど表示に係る処理
- UI イベントの ViewModel への伝搬
- ビジネスロジックは書かない
- 例えばテキスト入力のバリデーションの処理などは書かない
- テキストを ViewModel 経由で Model に渡して Model でバリデーションしてその結果を ViewModel 経由で View に渡して処理するのが正しい