RxSwiftのSubjectとRelayについて理解する
はじめに
「比較して学ぶRxSwift」を読んで、SubjectやRelayについての理解が深まったので、整理しました。
Subject・Relayとは
Observableはイベントを検知するためのクラスですが、
一方SubjectとRelayはイベントの検知も、イベントの発生もできるクラスです。
流せるイベント | バッファ | |
---|---|---|
PublishSubject | onNext, onError, onComplete | 持たない |
BehaviorSubject | onNext, onError, onComplete | 持つ |
PublishRelay | onNext | 持たない |
BehaviorRelay | onNext | 持つ |
※ Subjectは3種類のイベントを流すことができ、RelayはonNextのみ。
※ Publishはバッファを持たず、Behaviorはバッファを持つ。
バッファとは
BehaviorSubject/Relayは、subscribe時に1つ過去のイベントを受け取ることができる。
最初にsubcribeするときは、宣言時に設定した初期値を受け取る。
用途
-
Subject
- エラーによって処理を分けたいとき(通信処理やDB処理などでメッセージを出したい)
-
Relay
- UIに値をバインドする(イベントを拾えない状態にならないようonNextのみを保証したい)
RelayでのonNextイベント
Relayで、onNextのイベントを流すには、acceptのメソッドを使用する。
内部的にはSubjectのラッパーとなっており、onNextを呼んでいる。
public final class PublishRelay<Element>: ObservableType {
private let _subject: PublishSubject<Element>
// Accepts `event` and emits it to subscribers
public func accept(_ event: Element) {
self._subject.onNext(event)
}
...
}
参考
Author And Source
この問題について(RxSwiftのSubjectとRelayについて理解する), 我々は、より多くの情報をここで見つけました https://qiita.com/atizawa/items/0d872198d93403dc82a8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .