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)
?
答案 0 :(得分:1)
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
返回一个AnyCancellable
,并且当该AnyCancellable
被销毁时,它会取消订阅。在此示例中,_ =
表示我没有保存该AnyCancellable
,因此它立即被销毁。此处无关紧要,因为此示例中的所有Publisher
(两个Just
和CombineLatest
)都是同步运行的。他们已经发布了AnyCancellable
被销毁之前将要发布的所有内容。但是通常,如果您要订阅可以异步发布值的AnyCancellable
,则需要保存Publisher
。