未触发Combine中的CombineLatest

时间:2020-02-03 05:33:04

标签: swift combine combinelatest

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)

1 个答案:

答案 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(两个JustCombineLatest)都是同步运行的。他们已经发布了AnyCancellable被销毁之前将要发布的所有内容。但是通常,如果您要订阅可以异步发布值的AnyCancellable,则需要保存Publisher