原創文章,歡迎轉載。轉載請註明:關東昇的博客 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類型的變量interest2。interestBy2是變異方法,它會直接改變變量interest2的值,所以interest2.interestBy2()語句調用完成後,變量interest2的值就改變了。
調用interestBy3方法計算利息,它是靜態方法,調用它須要以「類型名.」的方式即「Double.」的方式調用。
歡迎關注關東昇新浪微博@tony_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php