如何使用 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)
}
}
如何在没有 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)
}
}