本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考
以下还是有很多没看懂、不确定的地方,我会以“存疑”的注解指出。
在此感谢中文版翻译者,这极大地加快了 Swift 的学习速度。
本文地址:http://www.jb51.cc/article/p-badkhfnt-d.html
Reference:
原版:The Swift Programming Language
中文版:Swift 3 编程语言 - 属性
属性
在类的内部,可以定义属性观察器,实现在属性变化前和变化后做相应的处理。
存储属性
使用 let
或 var
引入。
延迟存储属性
使用 lazy
关键字来修饰变量,则相应的属性在首次使用的时候才会去计算其值。比如说在类里面定义一个 lazy 类成员,那么这个成员直邮在首次访问的时候才会创建相应的实例。
需要注意的是:延迟存储属性本身并不是线程安全的
计算属性
提供一个 getter
和一个可选的 setter
来间接得到和设置相应的属性值。类似于 Objective-C 里面重载 getter 和 setter 的行为。以下是例子:
struct Rect { var origin = Point() var size = Size() var center: Point { get { ... return ... } set (newCenter) { // 如果不显式指定变量名的话,则默认为 “newValue” ... } } }
如果只提供了 getter 就表示这是一个只读属性。
属性观察
除了 lazy 属性之外,所有属性都可以观察,主要是 willSet
和 didSet
关键字。
class StepCounter { var totalSteps: Int = 0 { willSet (newTotalSteps) { // 同理,默认名为 “newValue” ... } didSet { ... // 这里有一个默认值 “oldValue”,用来标示老值 } } }
类型属性
这种属性,在所有同一类型的类的所有实例仅有一个拷贝。必须赋予一个默认值,不可以使用 lazy 关键字。使用 static
关键字来标识。