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



我有三个发布者。两个已经产生了价值,一个可能会也可能不会。我需要把它们结合起来,产生产出。

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

为通知发布者准备一个值。预先准备好的发布者将立即发出信号:

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

注意,我在这里已经将Output类型映射到了Void。这意味着我不必创建一个伪Notification来进行预处理,但这也意味着闭包中的c变量将没有有用的值。

最新更新