swift - 有没有办法从对象本身调用对象的 "didSet"?

标签 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 更新 child 的某些部分)?谢谢。

最佳答案

本例的答案是否定的,因为 child 是类的实例,因此它是引用类型。 parent 实际上只保存一个指向 child 的指针,当 child 的内容更改时,该指针不会更改。

如果child是一个struct,你就必须使updateData发生变化并调用它会使didset触发在父级

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

关于swift - 有没有办法从对象本身调用对象的 "didSet"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219465/

相关文章:

ios - 如何解决 "Method does not override any method from its superclass"错误?

ios - 如果我想给自己分配一个属性怎么办?

swift - 使用 Int 枚举减少 Swift 3.0 中的高阶函数

string - 如何根据标记将字符串分解为数组?

swift - dispatch_after 时间立即触发

swift - 内部didSet保护离奇地延伸到全类?

初始化时 Swift 触发 didSet

swift - willset 和 didset 是否被视为 Swift 中的闭包?

swift - didSet 不适用于变量

ios - 如何快速为 uitableview 上提交的文本提供文本字段更改事件?