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

原創文章,歡迎轉載。轉載請註明:關東昇的博客 php

 

能夠在原始類型上擴展計算屬性,包括實例計算屬性和靜態計算屬性。添加計算屬性的定義,與普通的計算屬性的定義是同樣的。java

實例計算屬性示例:在網絡編程時,爲了減小流量,從服務器端返回的不是信息描述,而是編碼,而後在本地再將編碼轉換爲描述信息。爲此定義了以下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屬性,訪問方式與其餘的靜態計算屬性同樣,經過「類型名」加「.」來訪問靜態計算屬性。網絡

 

擴展方法網站

能夠在原始類型上擴展方法,包括實例方法和靜態方法。這些添加方法的定義與普通方法的定義是同樣的。編碼

下面先看一個示例:spa

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關鍵字,代表這是變異方法。.net

調用interestBy1方法計算利息,調用它的實例10_000.00,它的返回值被賦值給interest1常量,這是很常見的調用過程。

調用interestBy2方法計算利息,咱們不能使用10_000.00實例調用,而是須要一個Double類型的變量interest2interestBy2是變異方法,它會直接改變變量interest2的值,所以interest2.interestBy2()語句調用完成後,變量interest2的值就改變了。

調用interestBy3方法計算利息,它是靜態方法,調用它須要以「類型名.」的方式即「Double.」的方式調用。

 

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

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

相關文章
相關標籤/搜索