swift之屬性

來源:互聯網
上載者:User

標籤:pos   類型   ret   enum   總結   實值型別   static   ids   知識點   

知識點總結:

1、儲存屬性

struct Town{    let region = "South" //唯讀屬性    var population = 5422 //讀寫屬性}

2、惰性儲存屬性

對於屬性來說,惰性載入意味著屬性的值只在第一次訪問的時候才會出現,因此lazy屬性必須聲明為var。注意:標記為lazy的屬性只會被計算一次。

struct Town{    let region = "South" //唯讀屬性    var population = 5422 //讀寫屬性        enum Size {        case small        case middle        case large    }        lazy var townSize:Size = {        switch self.population {        case 0...10000:            return Size.small        case 10001...100000:            return Size.middle        default:            return Size.large        }            }()}

解釋兩點:1、self.population中self重要性:這個閉包必須引用self才能在閉包內訪問到這個執行個體的population屬性;2、這個地方為什麼要用惰性屬性:為了讓閉包能安全地訪問self,編譯器必須知道self已經初始化完成了。把townSize標記為lazy是告訴編譯器這個屬性不是建立self所必須的;如果它不存在,就應該在它第一次被訪問的時候建立。這就告訴編譯器:當閉包被調用時,self肯定已經可用了。

3、計算屬性

唯讀計算屬性

struct Town{    var population = 2300}class Monster{    var name = "Monster"    var town:Town?    var victimPool:Int{        get{            return town?.population ?? 0        }    }    }

可讀寫計算屬性

struct Town{    var population = 2300}class Monster{    var name = "Monster"    var town:Town?    var victimPool:Int{        get{            return town?.population ?? 0        }        set{            town?.population = newValue        }    }    }

4、屬性觀察者

屬性觀察者對於任何自訂的儲存屬性和任何繼承的屬性都可用。自訂的計算屬性不能用屬性觀察

struct Town{    var population = 2300 {        willSet{            print("The population will change from \(population) to \(newValue)")        }        didSet{            print("The population has changed from \(oldValue) to \(population)")        }    }}

5、類型屬性

類型屬性對於類型是通用的,他們的值在同類型執行個體間共用的。實值型別(結構體和枚舉)既可以有儲存類型屬性、也可以有計算類型屬性,實值型別的類型屬性以關鍵字static開頭。類也可以有儲存類型屬性和計算類型屬性,文法上如果用static,則子類不能覆蓋父類的類屬性,如果用class關鍵字,子類能為某個類屬性提供自己的實現。

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.