我有一系列View Controllers
,它们将struct
模型对象向下传递给链。
如果用户修改了模型上属性的值,我将更新视图控制器的模型实例,现在我需要通知父视图控制器该对象的值已更改。
以前,我会在模型对象上使用classes
而不是structs
,所以我不会遇到这个问题,因为该对象将被直接写入。
但是由于结构是按值传递的,因此我必须在其他视图控制器上更新状态。我一直在使用单例管理器对象通过调用updateModel()处理状态更改。有更好的方法吗?
我使用了与此类似的东西;保留对相邻视图控制器的引用(注意避免引用循环),并在struct
属性上使用属性观察器进行更改,以在其发生更改时进行更新。
也可以根据您的需要在提供新的视图控制器之前或在设置之前进行更新。
class myViewController: UIViewController {
// Your struct
var model: MyStruct? {
didSet {
if let pvc = previousVC {
pvc.model = model
}
}
}
// Keep a reference to the previous view controller on your stack
var previousVC: UIViewController?
override viewDidLoad() {
super.viewDidLoad()
self.model = MyStruct()
}
}