gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:01:06 26 4
gpt4 key购买 nike

我有这个代码:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com