swift - 当一个发布者尚未发出时,如何让 combineLatest 发送一个值?
问题描述
CombineLatest
每当两个发布者之一发生更改时,我都会尝试使用发布一个值。碰巧这些发布者之一是ObservedObject ( )的objectWillChange属性。PassthroughSubject<Void, Never>
Publishers.CombineLatest(
settings.objectWillChange,
$aPublishedProperty)
.sink(receiveValue: { _, _ in
// Do something…
})
.store(in: &subscriptions)
这里的问题是只要这个对象不改变,CombineLatest就永远不会发出。而且我实际上并不关心它的void值。我只是把它放在这里,以便将来如果它发生变化,那么我的接收器将再次被调用。
如何在没有初始值的情况下触发 CombineLatest?即:仅随着aPublishedProperty
?
解决方案
有一个很好的运算符prepend(_:)
,您可以使用它来使发布者发出初始值。
就我而言,我所要做的就是添加.prepend(())
到objectWillChange
.
Publishers.CombineLatest(
settings.objectWillChange.prepend(()), // ⬅️ Useful stuff here
$aPublishedProperty)
.sink(receiveValue: { _, _ in
// Do something…
})
.store(in: &subscriptions)
推荐阅读
- php - 使用 PHP 标头解析相对 url 路径
- javascript - 角度 6 如果未选择任何选项,如何更新属性
- ios - 如何移动 UIView 并使用 Swift 以编程方式放置新的 UIView?
- chilkat - 我可以向 Chilkat 任务链添加多少个任务?
- python-3.x - 如何在 pandas.read_csv() 之前预处理数据
- javascript - Vue prop 默认值无法正常工作
- javascript - 如何使用事件侦听器将类切换到单个列表项
- ruby-on-rails - 我正在尝试通过在 Rails 中使用 webpacker 来安装 toastr
- python - 如何使用 Python 在 Cplex 中制定线性规划问题
- ios - 在 ReactiveSwift 中对 Signal 的 Skip(while:) 调用被忽略