【发布时间】:2023-11-02 09:03:01
【问题描述】:
假设我有一个 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的属性公开为CurrentValueSubjects,使Person可观察 -
我试过了,但效果不佳。我总是拥有
persons数组的多个副本,而不是跟踪它的一个实例 -
将您的数组包装成
Contacts对象或其他任何东西,并使其成为数组的唯一所有者。