Swift Combine Framework - 如何正确观察数组?
Swift Combine Framework - How to properly observe an array?
假设我有一个 Person
结构数组,如下所示:
struct Person {
var name: String
}
var persons = [Person(name: "A"), Person(name: "B"), Person(name: "C")]
let publisher = CurrentValueSubject<[Person], Never>(persons)
// subscribe to changes to the array
let subscription: AnyCancellable = publisher.sink { (persons) in
print("The array has changed")
}
var currentPersons = publisher.value
currentPersons[0].name = "Changed"
publisher.send(currentPersons)
这行得通。每当数组中的任何内容更改或删除或添加某些内容时,它都会发布。
但是,如果我还想只订阅数组中的一个元素怎么办?我可以这样做吗?我简直想不通。
在数组中引用并不会神奇地将对象置于观察之下。如果你想观察一个物体,你必须观察那个物体本身。保持这样的观察与某些数组的内容协调是非常棘手的,因为您需要在添加新对象时开始观察它,并在删除时停止观察它。
假设我有一个 Person
结构数组,如下所示:
struct Person {
var name: String
}
var persons = [Person(name: "A"), Person(name: "B"), Person(name: "C")]
let publisher = CurrentValueSubject<[Person], Never>(persons)
// subscribe to changes to the array
let subscription: AnyCancellable = publisher.sink { (persons) in
print("The array has changed")
}
var currentPersons = publisher.value
currentPersons[0].name = "Changed"
publisher.send(currentPersons)
这行得通。每当数组中的任何内容更改或删除或添加某些内容时,它都会发布。
但是,如果我还想只订阅数组中的一个元素怎么办?我可以这样做吗?我简直想不通。
在数组中引用并不会神奇地将对象置于观察之下。如果你想观察一个物体,你必须观察那个物体本身。保持这样的观察与某些数组的内容协调是非常棘手的,因为您需要在添加新对象时开始观察它,并在删除时停止观察它。