有没有办法从对象本身内调用对象的“didSet”?

时间:2017-11-10 09:26:02

标签: swift didset

我有这段代码:

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更新了孩子的某些部分)?感谢。

1 个答案:

答案 0 :(得分:0)

这种情况下的答案是否定的,因为child是一个类的实例,所以它是一个引用类型。 parent实际上只保留指向child的指针,该指针在child内容更改时不会更改。

如果childstruct,您必须进行updateData变异并调用didset Parent

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