你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 《從零開始學Swift》學習筆記(Day 50)——擴展計算屬性、方法

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

編輯:IOS開發綜合
可以在原始類型上擴展計算屬性,包括實例計算屬性和靜態計算屬性。添加計算屬性的定義,與普通的計算屬性的定義是一樣的。
實例計算屬性示例:在網絡編程時,為了減少流量,從服務器端返回的不是信息描述,而是編碼,然後在本地再將編碼轉換為描述信息。為此定義了如下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.”的方式調用。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved