我有这段代码:
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
更新了孩子的某些部分)?感谢。
答案 0 :(得分:0)
这种情况下的答案是否定的,因为child
是一个类的实例,所以它是一个引用类型。 parent
实际上只保留指向child
的指针,该指针在child
内容更改时不会更改。
如果child
是struct
,您必须进行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