Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 快速组合-将多个可观察对象(CurrentValueSubject或PassthroughSubject)合并为一个,但等待所有对象的更新_Swift_Reactive Programming_Combine - Fatal编程技术网

Swift 快速组合-将多个可观察对象(CurrentValueSubject或PassthroughSubject)合并为一个,但等待所有对象的更新

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<

好的,我使用的是最后一个版本的Swift和Combine。 我的目标是将3个
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)