如果一个发布者没有产生任何值,如何使 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
变量将没有有用的值。
我有三个发布者。两个已经产生了价值,一个可能会或可能不会产生价值。我需要将它们组合起来并产生输出。
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
变量将没有有用的值。