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)

谢谢你这么多的新开发-工作完美,我永远不会想出它。