Combine 中的 CombineLatest 未被触发

CombineLatest in Combine is not fired

let a = Just("a")
let b = Just("b")
_ = Publishers.CombineLatest(a, b).map { a, b in
    print(a, b)
}

这是我的简单 CombineLatest 测试。我在 onAppear 函数中调用这个方法。 但是,我的 print(a,b) 没有被调用。我应该如何将我的代码修复为 运行 print(a, b)

A Publisher 在被赋予 Subscriber 之前不会产生值。 map 运算符不是 Subscriber.

最简单的解决方案(如 Sajjon 所述)是使用 sink:

let a = Just("a")
let b = Just("b")
_ = Publishers.CombineLatest(a, b).sink { a, b in
    print(a, b)
}

请注意 sink returns 和 AnyCancellable,当 AnyCancellable 被销毁时,它会取消订阅。在此示例中,_ = 表示我不保存 AnyCancellable,因此它会立即被销毁。这在这里无关紧要,因为此示例中的所有 Publisher(两个 JustCombineLatest)同步运行。在 AnyCancellable 被销毁之前,他们已经发布了他们将要发布的所有内容。但一般来说,如果您要订阅可以异步发布值的 Publisher,则需要保存 AnyCancellable