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...
Those two versions of ...Relay
are used to model different concepts:
BehaviorRelay
represents StatePublishRelay
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 someone need a simple example:
publishRelay
.asDriver(onErrorDriveWith: Driver.empty())
.drive(onNext: { value in
})
.disposed(by: disposeBag)
© 2022 - 2024 — McMap. All rights reserved.