Swift的懶載入和唯讀屬性的介紹

來源:互聯網
上載者:User

標籤:

懶載入

在 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 ?? "")}()

Swift的懶載入和唯讀屬性的介紹

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.