文章目录
1、存储属性
- 存储属性存储常量或者变量作为实例的一部分,用于类和结构体
- 可以的在定义的时候指定默认值
可以在构造过程中设置或修改存储属性的值
1.1 延迟存储属性
- 指第一次被调用时才会计算初始值的属性,也就是懒加载
- 实现方式: lazy var a = A()
注意: 延迟属性必须用 var 关键字修饰,因为它的初始值在初始化完成时是不会被设置的
- 适用场景:当属性依赖外部因素(构造过程,初始值复杂,大量计算),适合用延迟属性
class GPSTrackViewController: UIViewController {
var track: GPSTrack = GPSTrack()
lazy var preview: UIImage = {
for point in track.record {
// 进行昂贵的计算
}
return UIImage(/* ... */)
}()
}
- 延迟属性需要存储,所以需要在 GPSTrackViewController 的定义中加入这个延迟属性
- 和计算属性不同,存储属性和延迟存储属性不能被定义在扩展中
2、计算属性
- 计算属性不使用任何内存存储自己的值,每次调用都会实时计算
- 计算属性可以用在类、结构体和枚举
- 计算属性提供一个 getter 和一个可选的 setter 来间接获取、设置其他属性和变量的值
》外部只读,内部可读写 【可以用 private(set) 修饰】
struct GPSTrack {
private(set) var record: [(CLLocation, Date)] = []
}
》 只读属性
结果不会被缓存,每次访问,都会重新计算
struct GPSTrack {
var timestamps: [Date] {
return record.map { $0.1 }
}
}
- 参考资料
https://www.jianshu.com/p/07b7cb4ef603