如果一个发布者没有产生任何值,如何使 CombineLatest3 return 结果?

How to make CombineLatest3 return result if one publisher hasn't produced any values?

我有三个发布者。两个已经产生了价值,一个可能会或可能不会产生价值。我需要将它们组合起来并产生输出。

var changeDay = NotificationCenter.Publisher.init(center: .default, name: .NSCalendarDayChanged

    var someDate: AnyPublisher<Date, Never> {
        Publishers.CombineLatest3($someInputBool, $someInputDate, changeDay).map { (a, b, c) -> Date in
            return <someDate based on a and b, but if day changes, the result will be different.>
        }.eraseToAnyPublisher()
    }

如果日期还没有改变,CombineLatest3 将不会return 任何东西,因为它会在 运行 关闭之前等待来自 c 的初始值。即使一个发布者没有发出单个值,我如何确保 CombineLatest3 returns?我在这里使用 c 作为触发器来重新计算我的自定义日期。

为通知发布者添加一个值。前置发布商将立即发出信号:

let changeDay = NotificationCenter.default.publisher(for: .NSCalendarDayChanged)
    .map { _ in () }
    .prepend(())

请注意,我已将 Output 类型映射到 Void 此处。这意味着我不必创建一个虚拟的 Notification 来前置,但这也意味着你的闭包中的 c 变量将没有有用的值。