はじめに
RxSwiftについてまとめた内容をアップします。(ま今後も随時編集していきます)
目次
RxSwiftが受け入れられる理由は?
- メソッドチェインを使いつなげた関数型プログラミング
- 時間の概念を取り入れたリアクションをコードにできる( ex: debounceメソッド)
- MVVMによる処理の分離テストと書きやすさ
DriverとSignal
###Driver の効力
subscribe +
- メインスレッドで通知
- shareReplayLatestWhileConnected を使った Hot変換
- エラーを伝達しないことを前提とする
###Signal
replayされないDriver
⇨ replayされない = 過去のイベントを保持せず、なおかつ値を保持しないこと。
UIButtonのタップイベントなどに向いている。
Trait
メリット
Observableの生成 + read-only
ex) Single, Completable, Maybe
Hot-Cold
- HotなObservableはsubscribeされなくても動作する。
- HotはObservableは前のColdを動作させる。
- HotなObservableは分岐できる。
- HotなObservableはObserverを複数持てる。
- HotなObservableのイベントは各Observerで共有される。
- 各Observerに対して同じイベントが送出される。つまりそこまでのColdは何度も呼ばれない(分岐の性質)。
- すでに流れたイベント(Next)は送出されない。つまり途中からsubcribeすると途中からしか受け取れない。
- ColdなObservableはsubscribeするまで動作しない
- ColdなObservableは分岐できない
- ColdなObservableはObserverを1つしか持てない。2つ持とうとするとストリームが2つになる。
参考: 今日こそ理解するHot / Cold @社内RxSwift勉強会
Hot変換
- Hot変換するには
- ConnectableObservableに変換後、connect()を呼ぶ
- RefCountに対して1つ以上subscribeを行う。(RefCountはsubscribeすることによって内部でconnect()を呼び出す)
参考: 今日こそ理解するHot変換
参考文献
- オブザーバーパターンから始めるRxSwift入門
- [Rx研究読本 I ]
(https://booth.pm/ja/items/1076262)