屬性將值與特定的類、結構體或枚舉關聯。
存儲屬性存儲屬性會將常量和變量存儲為實例的一部分,只能用于類和結構體
存儲屬性的兩種方式:
常量結構體實例
延時加載存儲屬性
延遲存儲屬性,其初始值是在第一次使用的時候才計算,使用關鍵字lazy來標識一個延遲存儲屬性。延遲存儲屬性只能用var修飾,不能用let,且必須有值。
注:如果一個被標記為 lazy 的屬性在沒有初始化時就同時被多個線程訪問,則無法保證該屬性只會被初始化一次。
計算屬性計算屬性是直接計算(而不是存儲)值。計算屬性可以用于類、結構體和枚舉。并且計算屬性必須用 var修飾。
只讀計算屬性
只有 getter 沒有 setter 的計算屬性叫只讀計算屬性。只讀計算屬性總是返回一個值,可以通過點運算符訪問,但不能設置新的值。
屬性觀察器有父類的情況
屬性包裝器屬性包裝器在管理屬性如何存儲和定義屬性的代碼之間添加了一個分隔層,定義一個屬性包裝器,你需要創建一個定義 wrappedValue 屬性的結構體、枚舉或者類
使用
設置被包裝屬性的初始值
判斷值是否被調整
private (set) var projectedValue: Bool
全局變量和局部變量
全局變量是在函數、方法、閉包或任何類型之外定義的變量。局部變量是在函數、方法或閉包內部定義的變量
注:全局的常量或變量都是延遲計算的,不需要標記 lazy 修飾符,局部范圍的常量和變量從不延遲計算;不能在全局變量或者計算型變量上使用屬性包裝器
類型屬性類型屬性其實是一個全局變量,只會被初始化一次,使用 static 修飾