如果一个发布者未产生任何值,如何使CombineLatest3返回结果?

时间:2020-04-20 17:17:04

标签: ios swift uikit combine

我有三个出版商。两个已经产生了价值,另一个可能已经产生,也可能没有。我需要将它们结合起来并产生输出。

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将不会返回任何内容,因为它将在运行Clousure之前等待c的初始值。即使一个发布者未发出单个值,我如何确保CombineLatest3返回?我在这里使用c作为触发来重新计算自定义日期。

1 个答案:

答案 0 :(得分:0)

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

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

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

相关问题