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