ios - RxCocoa - 为什么 PublishRelay 没有 asDriver() 方法?

标签 ios rx-swift rx-cocoa

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

最佳答案

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

  • BehaviorRelay代表状态
  • PublishRelay 代表事件

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

重放事件意义不大(不是吗?),因此PublishRelay 不会重放其最新值。

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

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

(我使用来自 RxSwift 存储库上 @freak4pc 的 great comment 构建了这个答案)

关于ios - RxCocoa - 为什么 PublishRelay 没有 asDriver() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54426181/

相关文章:

ios - 在 RxCocoa/RxSwift 中,如何观察 BehaviorRelay<[object]> 数组大小的变化

ios - NSString drawAtPoint : and kCGTextFillClip, 为什么不起作用?

ios - bundle 无效。位于 '.app' 的包不包含包可执行文件

ios - 照片框架 : save exif data from picker (aperture, 焦距,快门速度,...)

swift - RxSwift Variable (Behavior Subject) 不发出信号

ios - RxSwift,如何在不使用 RxDataSourced 的情况下绘制 tableView?

objective-c - 如何通过点击 map 来识别国家?

ios - 使用 RxSwift 时如何在 UITableViewCell 中保留 UITextField 的值?

swift - Observable 总是订阅一次

ios - 在 RxSwift 中订阅 Observable 或 Driver 花费的时间太长