《從零開始學Swift》學習筆記(Day 50)——擴充套件計算屬性、方法

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

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  可以在原始型別上擴充套件計算屬性,包括例項計算屬性和靜態計算屬性。新增計算屬性的定義,與普通的計算屬性的定義是一樣的。
  例項計算屬性示例:在網路程式設計時,為了減少流量,從伺服器端返回的不是資訊描述,而是編碼,然後在本地再將編碼轉換為描述資訊。為此定義瞭如下Int型別擴充套件:

extension Int {                //定義Int型別的擴充套件
    var errorMessage : String {    //只讀計算屬性
    var errorStr = ""
    switch (self) {    
    case -7:
        errorStr = "沒有資料。"
    case -6:
        errorStr = "日期沒有輸入。"
    case -5:
        errorStr = "內容沒有輸入。"
    case -4:
        errorStr = "ID沒有輸入。"
    case -3:
        errorStr = "據訪問失敗。"
    case -2:
        errorStr = "您的賬號最多能插入10條資料。"
    case -1:
        errorStr = "使用者不存在,請到http://51work6.com註冊。"
    default:
        errorStr = ""
    }                        
    return errorStr
    }
}
let message = (-7).errorMessage        //獲得-7編碼對應的描述資訊

print("Error Code : -7 , Error Message : (message)")

  注意整個-7包括負號是一個完整的例項,因此呼叫它的屬性時需要將-7作為一個整體用小括號括起來。然而,如果是7則不需要括號。
  下面再看一個靜態屬性的示例:

struct Account {                //定義Account結構體
    var amount : Double = 0.0               //賬戶金額
    var owner : String = ""                 //賬戶名
}

extension Account {            //定義Account結構體的擴充套件靜態
    static var interestRate : Double {      //利率    
        return 0.0668
    }
}

print(Account.interestRate) //列印輸出interestRate屬性

  列印輸出interestRate屬性,訪問方式與其他的靜態計算屬性一樣,通過“型別名”加“.”來訪問靜態計算屬性。

擴充套件方法
  可以在原始型別上擴充套件方法,包括例項方法和靜態方法。這些新增方法的定義與普通方法的定義是一樣的。
下面先看一個示例:

extension Double {//定義Double型別的擴充套件
    static var interestRate : Double = 0.0668 //利率
    func interestBy1() -> Double {        
    return self * Double.interestRate    //靜態屬性利率
    }
    mutating func interestBy2() {        //定義例項方法interestBy2
    self = self * Double.interestRate    
    }
    static func interestBy3(amount : Double) -> Double {    //定義靜態方法interestBy3
    return interestRate * amount        //返回值是計算利息結果
    }
}

let interest1 = (10_000.00).interestBy1()    //呼叫interestBy1方法計算利息
print("利息1 : \(interest1)")

var interest2 = 10_000.00    //呼叫interestBy2方法計算利息
interest2.interestBy2()    
print("利息2 : \(interest2)")

var interest3 = Double.interestBy3(10_000.00)    //呼叫interestBy3方法計算利息

print("利息3 : (interest3)")

  程式碼self = self * Double.interestRate,把計算結果直接賦值給當前例項self。在結構體和列舉型別中給self賦值會有編譯錯誤,需要在方法前面加上mutating關鍵字,表明這是變異方法。
  呼叫interestBy1方法計算利息,呼叫它的例項10_000.00,它的返回值被賦值給interest1常量,這是很常見的呼叫過程。
  呼叫interestBy2方法計算利息,我們不能使用10_000.00例項呼叫,而是需要一個Double型別的變數interest2。interestBy2是變異方法,它會直接改變變數interest2的值,因此interest2.interestBy2()語句呼叫完成後,變數interest2的值就改變了。
  呼叫interestBy3方法計算利息,它是靜態方法,呼叫它需要以“型別名.”的方式即“Double.”的方式呼叫。

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

enter image description here

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

相關文章