《從零開始學Swift》學習筆記(Day 34)——靜態屬性是怎麼回事?

智捷關東昇發表於2016-03-18

原創文章,歡迎轉載。轉載請註明:關東昇的部落格
  我先來設計一個類:有一個Account(銀行賬戶)類,假設它有3個屬性:amount(賬戶金額)、interestRate(利率)和owner(賬戶名)。
  在這3個屬性中,amount和owner會因人而異,不同的賬戶這些內容是不同的,而所有賬戶的interestRate都是相同的。
  amount和owner屬性與賬戶個體有關,稱為例項屬性。interestRate屬性與個體無關,或者說是所有賬戶個體共享的,這種屬性稱為靜態屬性或型別屬性。
  物件導向型別(結構體、列舉和類)都可以定義靜態屬性,它們的語法格式分別如下所示:

struct 結構體名 {    //定義結構體, 結構體中可以定義靜態儲存屬性和靜態計算屬性
    static var(或let) 儲存屬性  = "xxx"  
    ... 
    static var 計算屬性名: 屬性資料型別 {  
    get {       
    return 計算後屬性值  
    }
    set (新屬性值) {  
    ...
    }
    }
}

enum 列舉名 {       //定義列舉,列舉中不可以定義例項儲存屬性,但可以定義靜態儲存屬性,也可以定義靜態計算屬性
    static var(或let) 儲存屬性  = "xxx"   
    ...
    static var 計算屬性名: 屬性資料型別 {   
    get {   
    return 計算後屬性值    
    }    
    set (新屬性值) {
    ...
    }     
    }
}

class 類名 {     //定義類,類中不僅可以定義例項儲存屬性,還可以定義靜態儲存屬性
      static var(或let) 儲存屬性  = "xxx"   
    ...
    class(或static)  var 計算屬性名: 屬性資料型別 {
    get {
    return 計算後屬性值
    }   
    set (新屬性值) {  
    ...
    }  
    }
} 

結構體靜態計算屬性也可以是隻讀的,語法如下:

static var 計算屬性名: 屬性資料型別 {
    return 計算後屬性值
}

看一個Account結構體靜態屬性示例:

struct Account {//定義Account結構體

    var amount: Double = 0.0                     //賬戶金額
    var owner: String = ""                          //賬戶名

    static var interestRate: Double = 0.0668  //定義靜態儲存屬性interestRate利率

    static var staticProp: Double {    //定義靜態計算屬性staticProp
    return interestRate * 1_000_000
    }

    var instanceProp: Double {    //定義例項計算屬性instanceProp
    return Account.interestRate * amount
    }
}

//訪問靜態屬性
print(Account.staticProp)    

var myAccount = Account()
//訪問例項屬性
myAccount.amount = 1_000_000    
//訪問靜態屬性
print(myAccount.instanceProp)

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章