Observableはイベントを検知するためのクラスですが、SubjectとRelayはイベントの検知のみでなく、イベントの発生もできます。
SubjectとRelayをまとめると、以下のようになります。
流せるイベント | バッファ | |
---|---|---|
PublishSubject | onNext, onError, onComplete | 持たない |
BehaviorSubject | onNext, onError, onComplete | 持つ |
PublishRelay | onNext | 持たない |
BehaviorRelay | onNext | 持つ |
イベントとバッファ
イベント
Subject(PublishSubject と BehaviorSubject)は、「onNext」, 「onError」, 「onComplete」の3種類のイベントを流すことができます。
Relay(PublishRelay と BehaviorRelay)は「onNext」のイベントのみになります。
バッファ
Behavior(BehaviorSubject と BehaviorRelay)は、購読した直前のデータをバッファして、そのデータから通知することができます。
用途
Subjectはエラーによって処理を分けたいとき使用します。(通信処理やDB処理のメッセージなど)
RelayはUIに値をバインドする場合に使用します。(イベントを拾えない状態にならないようonNextのみを保証したい)