MVVM设计模式中的观测器方法swift



我对下面的代码有一个问题。

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。我之所以这么想我认为是

  1. 我们已经更改了值
  2. self.observer将起作用
  3. 当我们调用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也是一个函数。

相关内容

  • 没有找到相关文章

最新更新