《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法

原创文章,欢迎转载。转载请注明:关东升的博客 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类型的变量interest2interestBy2是变异方法,它会直接改变变量interest2的值,所以interest2.interestBy2()语句调用完成后,变量interest2的值就改变了。

调用interestBy3方法计算利息,它是静态方法,调用它须要以“类型名.”的方式即“Double.”的方式调用。

 

欢迎关注关东升新浪微博@tony_ 关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

相关文章
相关标签/搜索