原创文章,欢迎转载。转载请注明:关东升的博客
可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性。添加计算属性的定义,与普通的计算属性的定义是一样的。
实例计算属性示例:在网络编程时,为了减少流量,从服务器端返回的不是信息描述,而是编码,然后在本地再将编码转换为描述信息。为此定义了如下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.”的方式调用。
相关推荐
从零开始学swift,图灵原创,关东升著。基于swift2.x。2016年3月版
swift 学习笔记 之 扩展
最新的关于学习swift开发的书籍,讲的非常好
Swift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习...
以下是从零开始学习SwiftUI的一些建议: 了解Swift语言基础:SwiftUI是用Swift语言编写的,因此了解Swift语言的基础知识是非常重要的。你可以从苹果官方文档、在线教程或书籍中学习Swift语言。 学习SwiftUI基本概念...
精选Swift相关的学习笔记与资料集合打包上传给大家,这里的笔记非常的容易看得懂,基本上学习编程的看这一堆东西就能很快上上手了,非常的实用。
Swift学习的笔记,总结性的东西,很实用,非常适合新手看,之前学过OC的朋友基本上一看就能上手,非常的实用。
学习swift的笔记,自己记录的,必须50字,凑够了算,谢谢
NULL 博文链接:https://duchengjiu.iteye.com/blog/2184242
贝塞尔曲线使用——模拟心跳曲线
IOS开发-Swift-基础知识学习笔记
swift 学习笔记 之 函数 编程题
ios开发 swift语言学习资料,入门学习,简单易懂;ios开发 swift语言学习资料,入门学习,简单易懂
学习swift的笔记,部分代码来自教程。打包的playground方便学习和查看效果。
目前最全最火的swift学习资源和笔记,非常适合小白入门 目前最全最火的swift学习资源和笔记,非常适合小白入门 目前最全最火的swift学习资源和笔记,非常适合小白入门 目前最全最火的swift学习资源和笔记,非常...
Swift学习笔记 更新日志 学习资料 《The Swift Programming Language》中文版
Swift学习资料
Swift 学习资料.zip,在Playgrounds上编写的Apple Swift语言摘要
Swift_100days, 从 [100 Days of Swift ] 学习 Swift Swift_100days如果你刚刚开始学习swift,的话,我建议你从 3.0开始学习 Swift ~ !我开始学习 Swift,因为接下来的天,我 。这是我按天排序的演示,如果我有时间...