Swift 快速组合-将多个可观察对象(CurrentValueSubject或PassthroughSubject)合并为一个,但等待所有对象的更新
好的,我使用的是最后一个版本的Swift和Combine。 我的目标是将3个Swift 快速组合-将多个可观察对象(CurrentValueSubject或PassthroughSubject)合并为一个,但等待所有对象的更新,swift,reactive-programming,combine,Swift,Reactive Programming,Combine,好的,我使用的是最后一个版本的Swift和Combine。 我的目标是将3个CurrentValueSubject或PassthroughSubject组合成一个序列,等待它们发出一次 让我们以下面的例子为例: var var1 = CurrentValueSubject<[String], Never>)([]) var var2 = CurrentValueSubject<Int, Never>(0) var var3 = CurrentValueSubject<
CurrentValueSubject
或PassthroughSubject
组合成一个序列,等待它们发出一次
让我们以下面的例子为例:
var var1 = CurrentValueSubject<[String], Never>)([])
var var2 = CurrentValueSubject<Int, Never>(0)
var var3 = CurrentValueSubject<Date?, Never>(nil)
好的,这样的作品,但它会打印<代码>打印第二次通过时代码>3次。
比方说,如果我执行以下代码,它将只执行一次
var1.send(["test","test1"])
var2.send(0)
var3.send(Date())
但我要补充一点
var1.send(["test","test1"])
var2.send(0)
var3.send(Date())
var1.send(["test","test1"])
这将再次触发我的合并出版商。我只想在以下情况下再次触发它:
var1.send(["test","test1"])
var2.send(0)
var3.send(Date())
var1.send(["test2","test3"])
var2.send(2)
var3.send(Date())
我希望这是有意义的,让我知道如果你有一个如何解决这个问题的想法 似乎正是您想要的:
Publishers
.Zip3(var1, var2, var3)
.sink(receivedValue: { var1, var2, var3 in
print("Printed!")
})
.store(in: &subscriptions)
从以下文件:
使用zip(::)
返回一个新发布者,该发布者将来自另外两个发布者的元素组合在一起,以将元组发布到下游。返回的发布服务器等待所有三个发布服务器发出事件,然后将每个发布服务器中最早的未使用事件作为元组传递给订阅服务器
瞧 您可以使用publisher.Zip3——只有在这三个发布了它们的值之后,它才会发布一个值。谢谢!我在文件中读到了关于Zip的内容,但我不明白它在做什么!Combine基于反应式扩展(Rx)范式。这意味着您可以利用近十年的Rx教程和指南,更好地了解Combine提供的功能。例如,rxmarbles允许您以可视化、交互的方式浏览和。
Publishers
.Zip3(var1, var2, var3)
.sink(receivedValue: { var1, var2, var3 in
print("Printed!")
})
.store(in: &subscriptions)