我有这个代码:
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/