如何使用 Combine 框架观察数组的变化?

How do I observe changes on an array with Combine framework?

如何在没有 SwiftUI 的情况下使用 Combine 框架观察数组的变化?

基本上,我希望在添加或删除元素时调用此接收器块。

import Combine

var list = ["A", "B", "C"]
list.publisher
    .collect()
    .sink { value in
        print(value)
    }

// I want to observe these changes.
list.append("D")
list.removeAll { [=10=] == "B"}

我读过 并且我知道 @Published 属性 包装器是这样工作的。 但我不能使用 SwiftUI,正在寻找其他解决方案。

Combine 是一个完全独立于 SwiftUI 的框架,因此它可以单独使用。

我会使用 @Published 属性为列表添加发布者。然后您可以接收事件。

您需要将生成的 AnyCancellable 存储起来(例如在一个集合中),以便可以正确取消订阅并且不会立即解除分配。

class MyClass {
    @Published var list: [String] = []
    
    private var cancellables: Set<AnyCancellable> = []
    
    func setUp() {
        $list
            .receive(on: RunLoop.main)
            .sink { listItems in
                // Items changed
            }.store(in: &cancellables)
    }
}