《從零開始學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 擴充套件 Storyboard 屬性Swift套件
- C#學習筆記(補充)——擴充套件方法、事件C#筆記套件事件
- C#學習筆記-方法引數、擴充套件方法C#筆記套件
- python Scrapy 從零開始學習筆記(一)Python筆記
- python Scrapy 從零開始學習筆記(二)Python筆記
- PHP從零開始系列二(學習筆記):序言PHP筆記
- PHP從零開始系列一(學習筆記):前言PHP筆記
- 從零開始學Electron筆記(六)筆記
- 從零開始學Electron筆記(七)筆記
- 從零開始學Electron筆記(二)筆記
- 從零開始學Electron筆記(四)筆記
- 從零開始學Electron筆記(五)筆記
- 從零開始學Electron筆記(一)筆記
- 從零開始學Electron筆記(三)筆記
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 擴充套件中國剩餘定理(EXCRT)學習筆記套件筆記
- 從零開始JAVA資料結構學習筆記(一)Java資料結構筆記
- 從零開始學習機器學習機器學習
- 從零開始學習laravelLaravel
- 從零開始學習KafkaKafka
- ES6學習筆記4--字串的擴充套件筆記字串套件
- 再學Blazor——擴充套件方法Blazor套件
- 如何從零開始學習Linux雲端計算的運維?Linux運維
- 從零開始的Python學習 知識補充sortedPython
- 從EventBus學習擴充套件Weex事件機制套件事件
- PHP中的MySQLi擴充套件學習(二)mysqli類的一些少見的屬性方法PHPMySql套件
- 從零開始的JAVAday50~day56Java
- bash的特有擴充套件屬性套件
- 從零開始機器學習機器學習
- swift擴充套件ExtensionsSwift套件
- 從零開始學五筆(一):概述
- 從零開始實現簡單 RPC 框架 2:擴充套件利器 SPIRPC框架套件
- XAML 屬性元素,標記擴充套件和註釋套件
- System Design 關係型資料庫的擴充套件 - 學習筆記資料庫套件筆記
- sql中的擴充套件學習SQL套件
- 《Python深度學習從零開始學》簡介Python深度學習
- 從零開始機器學習-03機器學習
- 從零開始機器學習--4機器學習