Swift 从另一个对象观察@Published var
我试图让一个对象监听另一个对象属性的变化。我让它如下图所示工作,但我更希望观察对象对模型一无所知,只知道属性Swift 从另一个对象观察@Published var,swift,combine,Swift,Combine,我试图让一个对象监听另一个对象属性的变化。我让它如下图所示工作,但我更希望观察对象对模型一无所知,只知道属性 class Model : ObservableObject{ @Published var items: [Int] = [] } class ObjectUsingItems{ var itemObserver: AnyCancellable? var items: [Int] = [] func observeItems(model: M
class Model : ObservableObject{
@Published var items: [Int] = []
}
class ObjectUsingItems{
var itemObserver: AnyCancellable?
var items: [Int] = []
func observeItems(model: Model){
itemObserver = model.$items
.sink{ newItems in
self.items = newItems
print("New Items")
}
}
}
此时,我开始观察model.items,如下所示-这是有效的:
let model = Model()
let itemUser = ObjectUsingItems()
itemUser.observeItems(model: model)
model.items.append(1) // itemUser sees changes
不幸的是,我似乎无法确定什么是observeItems方法所需的参数,因此它在不了解任何模型的情况下工作-如下所示:
class ObjectUsingItems{
var itemObserver: AnyCancellable?
var items: [Int] = []
func observeItems(propertyToObserve: WhatGoesHere?){
itemObserver = propertyToObserve
.sink{ newItems in
// etc.
}
}
}
let model = Model()
let itemUser = ObjectUsingItems()
itemUser.observeItems(propertyToObserve: model.$items)
然后这样称呼它:
itemUser.observeItems(XXX: model.$items)
有人能解释一下我需要做什么吗?谢谢 如果您不关心值来自何处,您可以接受发布者作为参数 在您非常具体的情况下,可能是:
func observeItems(propertyToObserve: Published<[Int]>.Publisher) {
itemObserver = propertyToObserve
.sink { self.items = $0 }
}
用法如下所示:
class ObjectUsingItems{
var itemObserver: AnyCancellable?
var items: [Int] = []
func observeItems(propertyToObserve: WhatGoesHere?){
itemObserver = propertyToObserve
.sink{ newItems in
// etc.
}
}
}
let model = Model()
let itemUser = ObjectUsingItems()
itemUser.observeItems(propertyToObserve: model.$items)
谢谢你这么多的新开发-工作完美,我永远不会想出它。