【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
こんにちは、@akio0911です。今回はRxSwiftのBehaviorRelayとPublishRelayについてまとめてみました。
BehaviorRelayとPublishRelayは、.nextだけ流せる
BehaviorRelayとPublishRelayは、.nextだけ流せます。つまり、.errorや.completedが流れてこないことを保証できます。.nextイベントを流すにはacceptメソッドを使います。
let behaviorRelay = BehaviorRelay<Int>(value: 1) behaviorRelay.subscribe { event in print(event) }.disposed(by: disposeBag) behaviorRelay.accept(2) behaviorRelay.accept(3) behaviorRelay.accept(4) // 実行結果 // next(1) // next(2) // next(3) // next(4)
let publishRelay = PublishRelay<Int>() publishRelay.subscribe { event in print(event) }.disposed(by: disposeBag) publishRelay.accept(1) publishRelay.accept(2) publishRelay.accept(3) // 実行結果 // next(1) // next(2) // next(3)
BehaviorRelayは初期値を持ち、PublishRelayは初期値を持たない
BehaviorRelayは初期値を持ち、PublishRelayは初期値を持ちません。
// 初期値を持つ let behaviorRelay = BehaviorRelay<Int>(value: 1) // 初期値を持たない let publishRelay = PublishRelay<Int>()
BehaviorRelayはvalueプロパティを持ち、PublishRelayはvalueプロパティを持たない
BehaviorRelayはvalueプロパティを持ち、PublishRelayはvalueプロパティを持ちません。
let behaviorRelay = BehaviorRelay<Int>(value: 1) let publishRelay = PublishRelay<Int>() behaviorRelay.value // publishRelay.value // PublishRelayにvalueプロパティは存在しない
subscribeした時、BehaviorRelayは現在値を流し、PublishRelayは現在値を流さない
subscribeした時、BehaviorRelayは現在値を流しますが、PublishRelayは現在値を流しません。
let behaviorRelay = BehaviorRelay<Int>(value: 1) behaviorRelay.subscribe { event in print("behaviorRelay", event) }.disposed(by: disposeBag) let publishRelay = PublishRelay<Int>() publishRelay.subscribe { event in print("publishRelay", event) }.disposed(by: disposeBag) // 実行結果(publishRelayの現在値は流れてこない) // behaviorRelay next(1)
まとめ
もし誤りなどがあれば、Twitter(@akio0911)などで指摘して頂けると助かります!
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!