SignalとDriverの違い replayから読み解く

SignalとDriverについて

RxSwiftのSignalを調べてみると、 Signal は、replayを行わない。 Driver は、 replay を行う。 という解説を見かけました。 でも、replayってなんやろ?って思ったので、そこを踏まえて SignalDriver の違いについて解説をしていきたいと思います。

sharedReplayを使うメリット

1つのObservableに対して2つの購読対象がある場合2本のストリームが用意され、値が2度流れてくることになります。そこで、shareReplayを使います。 最後にshareReplayを書くと、1つの値しか流れ無くなります。 shareReplay(1)は、内部的にreplay(1).refCountを行なっています。 では、次の章でreplayを見ていきます。

ConnectableObservableとObservableの違い

Observableは、subscribeした時点でObserver毎に計算リソースが割り当てられています。 replayは、ConnectableObservableの変換を行っています。 ->map内に複数の処理が走ることになる

ConnectableObservableはsubscribeしているObserverが複数いたとしても、全てのObserver間で共有の計算リソースが割り当てられ、同時に値を通知する.

ただし、replayだけでは何も流れずconnectをする必要がある。 RxSwiftのConnectを使用すると、disposeをConnectされる毎にする必要がある。

そこで、refCountを使用する。 refCountは、subscribeされる度に内部でsubscribeしているのものをカウントしている。 そして、disposeする度に内部のカウントをデクリメントしている。 内部カウンターの値が0になると、Connectしたソースをdisposeする。