有什么方法可以从对象本身调用对象的 "didSet" 吗?

Is there any way to invoke "didSet" of object from within the object itself?

我有这个代码:

class Child {
    var data : String?;
    func updateData (s: String) { data = s; }
}

class Parent {
    var tableView : UITableView?
    var child : Child? { didSet { tableView.reloadData(); } }
    func updateChild { child?.updateData("Hello!"); }
}

如何调用 child?.updateData() 也可以调用 didSet(因为 child?.updateData 更新了 child 的某些部分)?谢谢。

这种情况的答案是否定的,因为child是一个class的实例,所以是引用类型。 parent 实际上只包含一个指向 child 的指针,当 child 的内容改变时它不会改变。

如果 child 是一个 struct 你将不得不使 updateData 变异并调用它会使 didsetParent[=20= 中触发]

struct Child {
    var data : String?;
    mutating func updateData (s: String) { data = s; }
}

class Parent {
    var tableView : UITableView?
    var child : Child? { didSet { tableView.reloadData(); } }
    func updateChild { child?.updateData("Hello!"); }
    init() { 
        child = Child()
    }
}

let p = Parent()

p.child?.updateData("foo") // will fire didSet

if let childUnwrapped = child {
    var varChild = childUnwrapped
    varChild.updateData("bar") // won't fire because of copy semantics