【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)などで指摘して頂けると助かります!

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

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

Twitterで更新情報をゲット!

PAGE TOP ↑