【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で更新情報をゲット!



