从不更新的动态列表合并发布者

时间:2020-09-25 14:45:28

标签: swift combine

背景

我有几个需要分组的发布者,在此示例中,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的订阅动态化,但似乎从未更新。

任何帮助将不胜感激

0 个答案:

没有答案