可以在原始類型上擴展計算屬性,包括實例計算屬性和靜態計算屬性。添加計算屬性的定義,與普通的計算屬性的定義是一樣的。
實例計算屬性示例:在網絡編程時,為了減少流量,從服務器端返回的不是信息描述,而是編碼,然後在本地再將編碼轉換為描述信息。為此定義了如下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 { //利率
return0.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.”的方式調用。