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
(两个 Just
和 CombineLatest
)同步运行。在 AnyCancellable
被销毁之前,他们已经发布了他们将要发布的所有内容。但一般来说,如果您要订阅可以异步发布值的 Publisher
,则需要保存 AnyCancellable
。
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
(两个 Just
和 CombineLatest
)同步运行。在 AnyCancellable
被销毁之前,他们已经发布了他们将要发布的所有内容。但一般来说,如果您要订阅可以异步发布值的 Publisher
,则需要保存 AnyCancellable
。