1
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)

4

1 回答 1

2

在给定 a 之前, APublisher不会产生值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返回一个AnyCancellable,当它AnyCancellable被销毁时,它会取消订阅。在这个例子中,_ =意味着我没有保存它AnyCancellable,所以它立即被销毁。这在这里无关紧要,因为Publisher本例中的所有 s(两个Justs 和CombineLatest)都是同步操作的。AnyCancellable他们已经发布了他们将在销毁之前发布的所有内容。AnyCancellable但一般来说,如果您订阅Publisher可以异步发布值的 a,则需要保存。

于 2020-02-03T21:10:17.987 回答