我有几个需要分组的发布者,在此示例中,varA
(发布者A1),varB
(发布者B1)和varC
(发布者C1的数组) ..n)。 C语言中发布者的数量是动态的,因为它们在不断变化。但是,varC
的发布者列表在启动时只进行过一次评估,并且CombineLatest从未真正订阅过发布者列表。当我添加到列表中或将其带走时,combiner
发布者并不关注它。
下面是问题的非常简化的版本
class GenericModel: ObservableObject {
@Published var dynamicList: [Publishable] = []
lazy let varA = Just(1)
lazy let varB = Just(2)
var varC: AnyPublisher<[Int], Never> {
return Publishers.MergeMany(self.dynamicList.map{ $0.getPublisher })
.collect()
.eraseToAnyPublisher()
}
lazy var combiner: AnyPublisher<Bool, Never> = {
Publishers.CombineLatest3(
varA,
varB,
varC
).map { v1, v2, v3 in
return v1 == 0 && v2 == 0 && v3.allSatisfy({ $0 == 0 })
}.eraseToAnyPublisher()
}()
}
在这种情况下,我订阅了combiner
。但是,无论何时运行,varC中的值总数为0。这也可以通过中断varC
的闭包(仅实例化一次)来确认。
我已经尝试了一些方法来使对dynamicList
的订阅动态化,但似乎从未更新。
任何帮助将不胜感激