【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた

公開日: : iOSアプリ開発

こんにちは、@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)などで指摘して頂けると助かります!

関連記事

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた

こんにちは、@akio0911です。今回はRxSwiftのBe

【RxSwift】materialize, dematealizeを使ってみた

@toshi0383さんに教えていただいた、RxSwiftのm

【RxSwift】ストリームのcompletedをつぶす(消し去る)方法

RxSwiftで元々のストリームからcompletedをつぶす

【RxSwift】completedかerrorが流れてきたらsubscribeはdisposeされる

RxSwiftにおいて、completedかerrorが流れて

init(frame:), init(coder:), awakeFromNib, prepareForInterfaceBuilder が呼ばれる条件をまとめてみた

カスタムViewを作った際に呼ばれる初期化系メソッドの条件や順

→もっと見る

PAGE TOP ↑