一、Swift中跟实例相关的属性可以分为2大类
1.1 存储属性( Stored Property)
类似于成员变量这个概念
存储在实例的内存中
结构体、类可以定义存储属性
枚举不可以定义存储属性(因为枚举只存储关联值和case)
1.2 计算属性( Computed Property)
本质就是方法(函数)
不占用实例的内存
枚举、结构体、类都可以定义计算属性
print(MemoryLayout<Circle>.stride) // 8 |
struct Circle {
// 存储属性
var radius: Double
// 计算属性
var diameter: Double {
set {
radius = newValue / 2
}
get {
radius * 2
}
}
}
var circle = Circle(radius: 5)
print(circle.radius) // 5.0
print(circle.diameter) // 10.0
circle.diameter = 12
print(circle.radius) // 6.0
print(circle.diameter) // 12.0
二、存储属性
关于存储属性,Swift有个明确的规定
在创建类 或 结构体的实例时,必须为所有的存储属性设置一个合适的初始值
可以在初始化器里为存储属性设置一个初始值
可以分配一个默认的属性值作为属性定义的一部分
三、计算属性
如果这个属性可以通过宁一个属性计算出来就设计为计算属性
有set 必须有get
四、枚举rawValue原理
枚举原始值rawValue的本质是:只读计算属性
enum TestEnum : Int {
case test1 = 1, test2 = 2, test3 = 3
var rawValue: Int {
switch self {
case .test1:
return 10
case .test2:
return 11
case .test3:
return 12
}
}
}
print(TestEnum.test3.rawValue) // 12
五、延迟存储属性( Lazy Stored Property)
class PhotoView {
lazy var image: Image = {
let url = "https://www.520it.com/xx.png"
let data = Data(url: url)
return Image(data: data)
}() 调用闭包
}