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

Bio*_*che 3 ios rx-swift rx-cocoa

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

tom*_*ahh 9

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

  • BehaviorRelay代表国家
  • PublishRelay代表事件

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

重播Events意义不大(否?),因此PublishRelay不重播其最新值。

考虑到这一点,当驱动程序使用State驱动应用程序时,将a BehaviorRelay转换为即可。对于共享战略和是共享的副作用和重播的最新值,而至少一个可观察的连接。DriverBehaviorRelayDriver

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

(我使用来自RxSwift存储库中@ freak4pc的出色注释来构建此答案)


nor*_*DEV 6

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

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

            })
            .disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)