1.存储属性和计算属性
- 存储属性就是Java里的普通属性,而计算属性就是指带了getter(或setter)的属性,而getter或setter里会带有一些逻辑,可以去处理存储属性或者其他一些操作,而不是像Java中只是简单的赋值(setter)或者返回传入的值(getter)
- 计算属性如果只有getter的话,可以省略get关键字,直接在{}里return要返回的东西,也就是所谓的只读计算属性
var volume: Double {
return width * height * depth
}
2.属性观察器
- 首先一点,之前一直很迷惑的是既然有setter,那为什么还要有属性观察器这种东西,在setter里去处理不就完了,这次再看了一遍swift指南,发现里面就是这么说的
可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重写属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。你不必为非重写的计算属性添加属性观察器,因为可以通过它的 setter 直接监控和响应值的变化。 属性重写请参考重写。
- 想了一下,
willSet(newValue)
和didSet(oldValue)
可以这样用,比如说在设置前检查一下newValue
是否有效,然后在设置完之后可以把oldValue
存储起来(比如某个数组)供后续使用