一、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.0circle.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)
}() 調用閉包
}