Swift3.x - 懶加載

懶加載的介紹

  • 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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容