懶加載的介紹
- Swift中也存在懶加載的方法
- 蘋果的設計思想,希望所有的對象在使用時再真正加載到內(nèi)存中
- 與OC不同的是,Swift中存在專門的關鍵字用于實現(xiàn)懶加載
- lazy關鍵字可以用于定義某一個屬性的懶加載
懶加載的使用
- 格式:
lazy var 變量: 類型 = {/**創(chuàng)建變量代碼*/}()
- 懶加載的使用
//懶加載的本質(zhì)是:在第一次使用的時候執(zhí)行閉包,將閉包的返回值賦值給屬性
//lazy的作用只會賦值一次
lazy var items : [String] = {
() -> [String] in
return["jim","jack","rose"]
}()
注意:上述閉包的表達式是在屬性定義的時候直接賦值給屬性的,閉包后面跟的()
是初始化的意思。
懶加載閉包的簡化寫法
懶加載方法的本質(zhì)為閉包,但是有時候閉包的格式有些繁瑣,需要參數(shù)定義,返回值,in
關鍵字引導的函數(shù)體等等!存在不需要傳入?yún)?shù)的情況,還需要寫繁瑣的格式,這就很尷尬了!但是蘋果怎么會讓你尷尬呢?
- 單表達式閉包隱式返回
單行表達式閉包可以通過省略return
關鍵字來隱式返回單行表達式結果。
上述懶加載方法可以這樣寫:
lazy var items : [String] = {
() -> [String] in
["jim","jack","rose"]
}()
因為定義屬性是明確需要返回一個字符串數(shù)組,函數(shù)體中只包含了單條語句,該語句返回一個字符串數(shù)組,因此這里沒有歧義,return
關鍵字可以省略。
- 參數(shù)名稱縮寫
Swift 自動為內(nèi)聯(lián)閉包提供了參數(shù)名稱縮寫功能,你可以直接通過$0,$1,$2
來順序調(diào)用閉包的參數(shù),以此類推。
如果你在閉包表達式中使用參數(shù)名稱縮寫,你可以在閉包定義中省略參數(shù)列表,并且對應參數(shù)名稱縮寫的類型會通過函數(shù)類型進行推斷。in
關鍵字也同樣可以被省略,因為此時閉包表達式完全由閉包函數(shù)體構成。
當然當閉包參數(shù)不存在的時候,也可以省略參數(shù)列表和in
關鍵字,閉包表達式完全由閉包函數(shù)體構成!
lazy var items : [String] = {
["jim","jack","rose"]
}()
Zeb
參考地址:https://github.com/numbbbbb/the-swift-programming-language-in-chinese