有什么方法可以从对象本身调用对象的 "didSet" 吗?
Is there any way to invoke "didSet" of object from within the object itself?
我有这个代码:
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
是一个class的实例,所以是引用类型。 parent
实际上只包含一个指向 child
的指针,当 child
的内容改变时它不会改变。
如果 child
是一个 struct
你将不得不使 updateData
变异并调用它会使 didset
在 Parent
[=20= 中触发]
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
我有这个代码:
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
是一个class的实例,所以是引用类型。 parent
实际上只包含一个指向 child
的指针,当 child
的内容改变时它不会改变。
如果 child
是一个 struct
你将不得不使 updateData
变异并调用它会使 didset
在 Parent
[=20= 中触发]
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