我对下面的代码有一个问题。
class Bindable<T> {
var value: T? {
didSet {
observer?(value)
}
}
var observer: ((T?) -> ())?
func bind(observer: @escaping (T?) -> ()) {
self.observer = observer // there is the place ı can not understand
observer?(value)
}
}
我们为什么要这样做self.observer = observer
?我希望我们应该使用observer = self.observer
而不是self.observer = observer
。我之所以这么想我认为是
- 我们已经更改了值
self.observer
将起作用- 当我们调用
func bind()
时,因为参数observer
将等于self.observer
,所以一切都需要完美工作
但是,我缺少什么?
self.observer = observer
表示将此函数分配给类属性observer
第一个self.observer
是您在var observer: ((T?) -> ())?
中定义的观测者
第二个observer
是您通过函数func bind(observer: @escaping (T?) -> ())
传递的
再举一个你会更理解的例子。
class Person {
var age: Int = 0
func setAge(age: Int) {
self.age = age
}
// to let you understand better
// if the param is `anotherAge`
// `self.` is not necessary
func setAge2(anotherAge: Int) {
age = anotherAge
}
}
这里的self.age = age
与您的self.observer = observer
没有什么不同,都为类属性分配了一个值。唯一的区别是您的observer
也是一个函数。