首页 > 解决方案 > RxCocoa - 为什么 PublishRelay 没有 asDriver() 方法?

问题描述

在 RxCocoa 上,我想知道为什么 PublishRelay 没有像 BehaviorRelay 这样的 asDriver() 方法?目前,如果我想将 publishRelay 转换为驱动程序,我必须指定在出现错误时返回的内容,这看起来很奇怪,因为继电器不能产生错误......

标签: iosrx-swiftrx-cocoa

解决方案


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

  • BehaviorRelay代表
  • PublishRelay代表事件

重放State是有意义的,因此会BehaviorRelay重放其最新值。

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

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

APublishRelay更好地由 a 表示Signal,因此您可能可以使用 aSignal来发射到。这种情况下的共享策略是不会重放最新的值,但在至少连接一个 observable 时仍然共享副作用。

(我使用来自 RxSwift 存储库的@freak4pc 的这个很棒的评论来构建这个答案)


推荐阅读