Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 从不更新的动态列表中合并发布服务器 背景_Swift_Combine - Fatal编程技术网

Swift 从不更新的动态列表中合并发布服务器 背景

Swift 从不更新的动态列表中合并发布服务器 背景,swift,combine,Swift,Combine,我有几个需要分组的发布者,在本例中有varA(发布者A1)、varB(发布者B1)和varC(发布者C1..n的数组)。C语言中的发布者阵列是动态的,因为它们在不断变化。然而,varC的发布者列表在启动时只评估过一次,而CombineLatest从未真正订阅发布者列表。当我向列表中添加或删除组合器时,发布者并不注意它 下面是这个问题的一个非常简化的版本 class GenericModel:ObservableObject{ @已发布变量dynamicList:[可发布]=[] lazy let

我有几个需要分组的发布者,在本例中有
varA
(发布者A1)、
varB
(发布者B1)和
varC
(发布者C1..n的数组)。C语言中的发布者阵列是动态的,因为它们在不断变化。然而,
varC
的发布者列表在启动时只评估过一次,而CombineLatest从未真正订阅发布者列表。当我向列表中添加或删除
组合器时,发布者并不注意它

下面是这个问题的一个非常简化的版本

class GenericModel:ObservableObject{
@已发布变量dynamicList:[可发布]=[]
lazy let varA=Just(1)
lazy-let-varB=Just(2)
var varC:AnyPublisher{
返回publisher.MergeMany(self.dynamicList.map{$0.getPublisher})
.collect()
.删除任何发布者()
}
惰性变量组合器:AnyPublisher={
出版商。联合测试3(
瓦拉,
瓦布,
varC
).map{v1、v2、v3英寸
返回v1==0&&v2==0&&v3.allsuccess({$0==0})
}.删除任何发布者()
}()
}
在本例中,我订阅了
combiner
。但是,无论何时运行,varC中的值总数都是0。这一点也可以通过打开
varC
s闭包得到证实,该闭包只实例化一次

我尝试了几种方法使订阅
dynamicList
动态,但它似乎从未更新


任何帮助都将不胜感激

所有动态发布者都完成了吗?否则,
varC
.collect
将等待上游
MergeMany
的完成,而上游
MergeMany
又将等待从动态list@NewDev啊,这是有道理的,没有一个是完整的。我完全误读了
收集
的用例。你知道我可以在collect的位置上使用什么来对所有动态发布者列表进行本质上的CombineTest吗?我不知道是否有一种简单的方法可以为一系列发布者实现类似CombineTest的功能。