RxSwiftのSubjectについて
きょうは英会話でめちゃくちゃ怖い先生にあたって凹んでいるので、 Tour of Go を読むのは一旦お休み。
※途中でElementと”値”という言葉が混在してるけど同じ意味。
RxのSubjectについて
SubjectはObserverでもありObservableでもある。つまりElementを流すこともできるしsubscribeすることもできる。
そしてSubjectは、
PublishSubjectReplaySubjectBehaviorSubject
の3つ存在する。
PublishSubject
PublishSubjectはsubscribe後のElementだけを流す。BehaviorSubjectとの違いは過去の値が流れてこないこと。
subscribeしたあとだけElementが流れてくる。
BehaviorSubject
subscribeされたタイミングで最新の値を流す。BehaviorSubjectを初期化する際は初期値を設定するようになっていて、
何もElementが流れていない場合は初期値を流すようになっている。
つまりsubscribeしたタイミングで何らかの値(初期値 or 過去の最新の値)が流れるようになっている。
let behaviorSubject = BehaviorSubject<Int>(value: 1)
ReplaySubject
subscribe後に値を流す。bufferSizeを指定するようになっていて、bufferSizeに指定した数だけElementだけを流す。
let replaySubject = ReplaySubject<Int>.create(bufferSize: 1)
指定したサイズの数だけElementをbufferしといて、subscribeされたらそれを流す感じ。
BehaviorSubjectはbufferSizeを1に設定したもの。
Variable
BehaviorSubjectをラップしているVariableというものもあって、プロパティのようにget/setで値が流れるようになる。
class Some {
let variable = Variable<Int>(1)
}
明日はshare()とshareReplay(n)の違いについて掘り下げてみるつもり。