好,所以我将Swift的最新版本与Combine结合使用。
我的目标是等待3个CurrentValueSubject
或PassthroughSubject
全部发射一次,将它们组合成一个序列。
让我们举一个例子:
var var1 = CurrentValueSubject<[String], Never>)([])
var var2 = CurrentValueSubject<Int, Never>(0)
var var3 = CurrentValueSubject<Date?, Never>(nil)
当它们各自发出新序列时,我希望所有值都合而为一。
所以我可以做这样的事情:
Publishers
.CombineLatest3(var1, var2, var3)
.sink(receivedValue: { var1, var2, var3 in
print("Printed!")
})
.store(in: &subscriptions)
好的,这样的作品,但是它将在第二遍上打印Printed!
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())
我希望这是有道理的,如果您有解决此问题的想法,请告诉我!