我有三个出版商。两个已经产生了价值,另一个可能已经产生,也可能没有。我需要将它们结合起来并产生输出。
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
作为触发来重新计算自定义日期。
答案 0 :(得分:0)
为通知发布者添加一个值。前置的发布者将立即发出信号:
let changeDay = NotificationCenter.default.publisher(for: .NSCalendarDayChanged)
.map { _ in () }
.prepend(())
请注意,这里我已将Output
类型映射到Void
。那意味着我不必创建一个虚拟的Notification
来作为前缀,但这也意味着您闭包中的c
变量将没有有用的值。