RxCocoa - 为什么 PublishRelay 没有 asDriver() 方法?
RxCocoa - Why doesn't PublishRelay have an asDriver() method?
在 RxCocoa 上,我想知道为什么 PublishRelay 没有像 BehaviorRelay 那样的 asDriver() 方法?目前,如果我想将 publishRelay 转换为驱动程序,我必须指定要 return 以防发生错误,这看起来很奇怪,因为中继不能生成错误...
这两个版本的...Relay
用于模拟不同的概念:
BehaviorRelay
代表状态
PublishRelay
代表事件
重播 State 是有意义的,因此 BehaviorRelay
重播其最新值。
重播 Events 意义不大(不是吗?),因此 PublishRelay
不会重播其最新值。
考虑到这一点,将 BehaviorRelay
转换为 Driver
是有意义的,因为驱动程序使用 State 驱动应用程序。 BehaviorRelay
和 Driver
的共享策略是共享副作用 并重放最新值 ,同时至少连接一个 observable。
A PublishRelay
更适合用 Signal
表示,因此您可能可以使用 Signal
发射到。这种情况下的共享策略是 不 重放最新值,但在至少连接一个 observable 时仍然共享副作用。
(我使用 RxSwift 存储库上 @freak4pc 的 great comment 构建了这个答案)
如果有人需要一个简单的例子:
publishRelay
.asDriver(onErrorDriveWith: Driver.empty())
.drive(onNext: { value in
})
.disposed(by: disposeBag)
在 RxCocoa 上,我想知道为什么 PublishRelay 没有像 BehaviorRelay 那样的 asDriver() 方法?目前,如果我想将 publishRelay 转换为驱动程序,我必须指定要 return 以防发生错误,这看起来很奇怪,因为中继不能生成错误...
这两个版本的...Relay
用于模拟不同的概念:
BehaviorRelay
代表状态PublishRelay
代表事件
重播 State 是有意义的,因此 BehaviorRelay
重播其最新值。
重播 Events 意义不大(不是吗?),因此 PublishRelay
不会重播其最新值。
考虑到这一点,将 BehaviorRelay
转换为 Driver
是有意义的,因为驱动程序使用 State 驱动应用程序。 BehaviorRelay
和 Driver
的共享策略是共享副作用 并重放最新值 ,同时至少连接一个 observable。
A PublishRelay
更适合用 Signal
表示,因此您可能可以使用 Signal
发射到。这种情况下的共享策略是 不 重放最新值,但在至少连接一个 observable 时仍然共享副作用。
(我使用 RxSwift 存储库上 @freak4pc 的 great comment 构建了这个答案)
如果有人需要一个简单的例子:
publishRelay
.asDriver(onErrorDriveWith: Driver.empty())
.drive(onNext: { value in
})
.disposed(by: disposeBag)