RxSwiftのSubjectについて
きょうは英会話でめちゃくちゃ怖い先生にあたって凹んでいるので、 Tour of Go を読むのは一旦お休み。
※途中でElement
と”値”という言葉が混在してるけど同じ意味。
RxのSubjectについて
SubjectはObserver
でもありObservable
でもある。つまりElement
を流すこともできるしsubscribe
することもできる。
そしてSubjectは、
PublishSubject
ReplaySubject
BehaviorSubject
の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)
の違いについて掘り下げてみるつもり。