On RxCocoa I was wondering why the PublishRelay doesn't have an asDriver() method like the BehaviorRelay ? Currently if I want to convert the publishRelay into a Driver, I have to specify what to return in case of error which seems weird given that the relays can't generate errors...
PublishRelay. This type of Relay will reemit all events once the Observer has subscribed to it.
RxSwift also provides a concept called Relays. RxSwift provides two of these, named PublishRelay and BehaviorRelay . These wrap their respective subjects, but only accept and relay next events. You cannot add a completed or error event onto relays at all, so they're great for non-terminating sequences.
RxSwift: Driver Go from: a single observable that updates the entire UI to bindTo and reuse the same observable across the viewController.
Those two versions of ...Relay
are used to model different concepts:
BehaviorRelay
represents State
PublishRelay
represents Events
It makes sense to replay State, hence BehaviorRelay
replays its latest value.
It makes less (no?) sense to replay Events, hence PublishRelay
does not replay its latest value.
With this in mind, it makes sens for a BehaviorRelay
to be transformable to Driver
, as a driver drives the application using State. The sharing strategy for BehaviorRelay
and Driver
is to share side effects and replay the latest value while at least one observable is connected.
A PublishRelay
is better represented by a Signal
, so you probably could use a Signal
to emit to. The sharing strategy in this case is will not replay the latest value, but still share the side effects while at least one observable is connected.
(I build this answer using this great comment from @freak4pc on RxSwift's repository)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With