RxCocoa-为什么PublishRelay不具有asDriver()方法?

时间:2019-01-29 17:06:07

标签: ios rx-swift rx-cocoa

在RxCocoa上,我想知道为什么PublishRelay没有像BehaviorRelay这样的asDriver()方法?当前,如果我想将publishRelay转换为Driver,我必须指定在发生错误的情况下返回的内容,鉴于中继无法生成错误,这似乎很奇怪。

2 个答案:

答案 0 :(得分:5)

这两个...Relay版本用于为不同的概念建模:

  • BehaviorRelay代表
  • PublishRelay代表事件

重播状态很有意义,因此BehaviorRelay重播其最新值。

重播事件的意义不大(否?),因此PublishRelay不会重播其最新值。

考虑到这一点,当驱动程序使用 State 驱动应用程序时,将BehaviorRelay转换为Driver是有意义的。 BehaviorRelayDriver的共享策略是在连接至少一个可观察对象的同时共享副作用并重播最新值

PublishRelay最好用Signal表示,因此您可以使用Signal来发射。在这种情况下,共享策略将重播最新值,但在连接至少一个可观察对象时仍会共享副作用。

(我使用RxSwift存储库中@ freak4pc的great comment构建此答案)

答案 1 :(得分:2)

如果有人需要一个简单的例子:

publishRelay
            .asDriver(onErrorDriveWith: Driver.empty())
            .drive(onNext: { value in

            })
            .disposed(by: disposeBag)