《從零開始學Swift》學習筆記(Day 50)——擴充套件計算屬性、方法
原創文章,歡迎轉載。轉載請註明:關東昇的部落格
可以在原始型別上擴充套件計算屬性,包括例項計算屬性和靜態計算屬性。新增計算屬性的定義,與普通的計算屬性的定義是一樣的。
例項計算屬性示例:在網路程式設計時,為了減少流量,從伺服器端返回的不是資訊描述,而是編碼,然後在本地再將編碼轉換為描述資訊。為此定義瞭如下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_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php
相關文章
- 《從零開始學Swift》學習筆記(Day 32)——計算屬性Swift筆記
- 《從零開始學Swift》學習筆記(Day 49)——擴充套件宣告Swift筆記套件
- 《從零開始學Swift》學習筆記(Day 51)——擴充套件建構函式Swift筆記套件函式
- 《從零開始學Swift》學習筆記(Day 44)——重寫屬性Swift筆記
- 《從零開始學Swift》學習筆記(Day 33)——屬性觀察者Swift筆記
- 《從零開始學Swift》學習筆記(Day 45)——重寫方法Swift筆記
- 《從零開始學Swift》學習筆記(Day 36)——靜態方法Swift筆記
- 《從零開始學Swift》學習筆記(Day 34)——靜態屬性是怎麼回事?Swift筆記
- 《從零開始學Swift》學習筆記(Day 24)——列舉Swift筆記
- 《從零開始學Swift》學習筆記(Day 16)——字典集合Swift筆記
- 《從零開始學Swift》學習筆記(Day 59)——程式碼排版Swift筆記
- 《從零開始學Swift》學習筆記(Day 17)——Swift中陣列集合Swift筆記陣列
- 《從零開始學Swift》學習筆記(Day 46)——下標重寫Swift筆記
- 《從零開始學Swift》學習筆記(Day 40)——解構函式Swift筆記函式
- 《從零開始學Swift》學習筆記(Day 41)——類的繼承Swift筆記繼承
- 《從零開始學Swift》學習筆記(Day 29)——訪問級別Swift筆記
- 《從零開始學Swift》學習筆記(Day 23)——尾隨閉包Swift筆記
- 《從零開始學Swift》學習筆記(Day 27)——可選型別Swift筆記型別
- 《從零開始學Swift》學習筆記(Day 10)——運算子是“ +、-、*、/ ”嗎?Swift筆記
- 《從零開始學Swift》學習筆記(Day 38)——建構函式與儲存屬性初始化Swift筆記函式
- 《從零開始學Swift》學習筆記(Day54)——丟擲錯誤Swift筆記
- 《從零開始學Swift》學習筆記(Day 47)——final關鍵字Swift筆記
- 《從零開始學Swift》學習筆記(Day 35)——會使用下標嗎?Swift筆記
- 《從零開始學Swift》學習筆記(Day 22)——閉包那些事兒!Swift筆記
- 《從零開始學Swift》學習筆記(Day 21)——函式返回值Swift筆記函式
- 《從零開始學Swift》學習筆記(Day 55)——使用try?和try!區別Swift筆記
- 《從零開始學Swift》學習筆記(Day 37)——預設建構函式Swift筆記函式
- 《從零開始學Swift》學習筆記(Day 39)——建構函式過載Swift筆記函式
- 《從零開始學Swift》學習筆記(Day 8)——小小常量、變數大作用Swift筆記變數
- 《從零開始學Swift》學習筆記(Day 12)——說幾個特殊運算子Swift筆記
- 《從零開始學Swift》學習筆記(Day 18)——有幾個分支語句?Swift筆記
- 《從零開始學Swift》學習筆記(Day 19)——函式引數傳遞Swift筆記函式
- 《從零開始學Swift》學習筆記(Day 9)——離開表示式你試試!Swift筆記
- 《從零開始學Swift》學習筆記(Day 56)—— Swift編碼規範之命名規範Swift筆記
- 《從零開始學Swift》學習筆記(Day 1)——我的第一行Swift程式碼Swift筆記
- 《從零開始學Swift》學習筆記(Day 3)——Swift 2.0之後增加的關鍵字Swift筆記
- swift學習筆記4——擴充套件、協議Swift筆記套件協議
- Swift學習筆記(二十六)——擴充套件Swift筆記套件