每两个发布者之一更改时,我都尝试使用CombineLatest
来发布值。恰好这些发布者之一是 ObservedObject (PassthroughSubject<Void, Never>
)的 objectWillChange 属性。
Publishers.CombineLatest(
settings.objectWillChange,
$aPublishedProperty)
.sink(receiveValue: { _, _ in
// Do something…
})
.store(in: &subscriptions)
这里的问题是只要该对象不变, CombineLatest 就不会发出。而且我实际上并不关心它的 void 值。我只是将其放在此处,以便将来更改时,我的接收器会再次被调用。
如何在没有初始值的情况下触发CombineLatest?即:仅更改aPublishedProperty
吗?
答案 0 :(得分:1)
有一个不错的prepend(_:)
运算符,可用于使发布者发出初始值。
对于我来说,我要做的就是将.prepend(())
添加到objectWillChange
。
Publishers.CombineLatest(
settings.objectWillChange.prepend(()), // ⬅️ Useful stuff here
$aPublishedProperty)
.sink(receiveValue: { _, _ in
// Do something…
})
.store(in: &subscriptions)
在docs
中查看