本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考
以下还是有很多没看懂、不确定的地方,我会以“存疑”的注解指出。
在此感谢中文版翻译者,这极大地加快了 Swift 的学习速度。
本文地址:https://segmentfault.com/a/1190000008649921
Reference:
原版:The Swift Programming Language
中文版:Swift 3 编程语言 – 属性
属性
属性可以分为计算属性
和存储属性
两种。
- 计算属性可以由
class
,struct
,enum
定义 - 存储属性可以由
class
,struct
定义
在类的内部,可以定义属性观察器,实现在属性变化前和变化后做相应的处理。
存储属性
使用 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
关键字来标识。