首页 > 解决方案 > 当一个发布者尚未发出时,如何让 combineLatest 发送一个值?

问题描述

CombineLatest每当两个发布者之一发生更改时,我都会尝试使用发布一个值。碰巧这些发布者之一是ObservedObject ( )的objectWillChange属性。PassthroughSubject<Void, Never>

Publishers.CombineLatest(
    settings.objectWillChange,
    $aPublishedProperty)
    .sink(receiveValue: { _, _ in
        // Do something…
    })
    .store(in: &subscriptions)

这里的问题是只要这个对象不改变,CombineLatest就永远不会发出。而且我实际上并不关心它的void值。我只是把它放在这里,以便将来如果它发生变化,那么我的接收将再次被调用。

如何在没有初始值的情况下触发 CombineLatest?即:仅随着aPublishedProperty?

标签: swiftreactive-programmingcombine

解决方案


有一个很好的运算符prepend(_:),您可以使用它来使发布者发出初始值。

就我而言,我所要做的就是添加.prepend(())objectWillChange.

Publishers.CombineLatest(
    settings.objectWillChange.prepend(()), // ⬅️ Useful stuff here
    $aPublishedProperty)
    .sink(receiveValue: { _, _ in
        // Do something…
    })
    .store(in: &subscriptions)

文档中查看


推荐阅读