概要
Subject
→ event
をsubscribers
に伝達する
新聞に例えると、、、
新聞(Subject
)は世の中の情報等(event
)を人々(subscribers
)に伝達するといったイメージです。
Subject
とはイベントの検知だけではなく、イベントの発生をさせることができます。つまり、ObservableType
であり、ObserverType
でもあるということです。
種類
RxSwiftで使用される代表的なものとして以下が挙げられます。
・Publish Subject
・Behavior Subject
・Relay Subject
Publish Subject
初期値は持たずバッファーもなし。subscribeした時から出力される
let publishSubject = PublishSubject<String>()
publishSubject.onNext("issue 1")
publishSubject.subscribe { event in
print(event)
}
publishSubject.onNext("issue 2")
publishSubject.onNext("issue 3")
// 出力
next(issue 2)
next(issue 3)
Behavior Subject
publish Subjectとは異なり、初期値とバッファーを持つ。
subscribeした時点から一つ過去のeventから流している。
let behaviorSubject = BehaviorSubject(value: "issue 1")
behaviorSubject.onNext("issue 2")
behaviorSubject.onNext("issue 3")
behaviorSubject.subscribe { event in
print(event)
}
behaviorSubject.onNext("issue 4")
// 出力
next(issue 3)
next(issue 4)
Relay Subject
Behavior Subjectのバッファーが指定できるようになったバージョン。ただし初期値はなし。
let replaySubject = ReplaySubject<String>.create(bufferSize: 2)
replaySubject.onNext("issue 1")
replaySubject.onNext("issue 2")
replaySubject.onNext("issue 3")
replaySubject.subscribe { event in
print("event1",event)
}
replaySubject.onNext("issue 4")
replaySubject.onNext("issue 5")
print("Subscription2")
replaySubject.subscribe { event in
print("event2",event)
}
replaySubject.onNext("issue 6")
replaySubject.onNext("issue 7")
// 出力
event1 next(issue 2)
event1 next(issue 3)
event1 next(issue 4)
event1 next(issue 5)
Subscription2
event2 next(issue 4)
event2 next(issue 5)
event1 next(issue 6)
event2 next(issue 6)
event1 next(issue 7)
event2 next(issue 7)
終わりに
以上です!