Bio*_*che 3 ios rx-swift rx-cocoa
在RxCocoa上,我想知道为什么PublishRelay没有像BehaviorRelay这样的asDriver()方法?当前,如果我想将publishRelay转换为Driver,我必须指定在发生错误的情况下要返回的内容,鉴于继电器无法生成错误,这看起来很奇怪。
的这两个版本...Relay用于为不同的概念建模:
BehaviorRelay代表国家PublishRelay代表事件重播State,因此BehaviorRelay重播其最新值很有意义。
重播Events意义不大(否?),因此PublishRelay不重播其最新值。
考虑到这一点,当驱动程序使用State驱动应用程序时,将a BehaviorRelay转换为即可。对于共享战略和是共享的副作用和重播的最新值,而至少一个可观察的连接。DriverBehaviorRelayDriver
A PublishRelay最好用来表示Signal,因此您可以使用Signal来发出。在这种情况下,共享策略将不会重播最新值,但在连接至少一个可观察对象时仍会共享副作用。
(我使用来自RxSwift存储库中@ freak4pc的出色注释来构建此答案)
如果有人需要一个简单的例子:
publishRelay
.asDriver(onErrorDriveWith: Driver.empty())
.drive(onNext: { value in
})
.disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |