Swift的懶加載和只讀屬性的介紹


懶加載

在 iOS 開發中,懶加載是無處不在的

  • 懶加載的格式如下:
lazy var person: Person = { print("懶加載") return Person() }() 
  • 懶加載本質上是一個閉包
  • 以上代碼可以改寫為以下格式
let personFunc = { () -> Person in print("懶加載") return Person() } lazy var demoPerson: Person = self.personFunc() 
  • 懶加載的簡單寫法
lazy var demoPerson: Person = Person()


只讀屬性

getter & setter

  • 在 Swift 中 getter & setter 很少用,以下代碼僅供了解
private var _name: String? var name: String? { get { return _name } set { _name = newValue } } 

存儲型屬性 & 計算型屬性

  • 存儲型屬性 - 需要開辟空間,以存儲數據
  • 計算型屬性 - 執行函數返回其他內存地址
var title: String { get { return "Mr " + (name ?? "") } } 
  • 只實現 getter 方法的屬性被稱為計算型屬性,等同於 OC 中的 ReadOnly 屬性
  • 計算型屬性本身不占用內存空間
  • 不可以給計算型屬性設置數值
  • 計算型屬性可以使用以下代碼簡寫
var title: String { return "Mr " + (name ?? "") } 

計算型屬性與懶加載的對比

  • 計算型屬性
    • 不分配獨立的存儲空間保存計算結果
    • 每次調用時都會被執行
    • 更像一個函數,不過不能接收參數,同時必須有返回值
var title2: String { return "Mr" + (name ?? "") } 
  • 懶加載屬性
    • 在第一次調用時,執行閉包並且分配空間存儲閉包返回的數值
    • 會分配獨立的存儲空間
    • 與 OC 不同的是,lazy 屬性即使被設置為 nil 也不會被再次調用
lazy var title: String = { return "Mr " + (self.name ?? "") }()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM