可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性。添加计算属性的定义,与普通的计算属性的定义是一样的。
实例计算属性示例:在网络编程时,为了减少流量,从服务器端返回的不是信息描述,而是编码,然后在本地再将编码转换为描述信息。为此定义了如下Int类型扩展:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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则不需要括号。
下面再看一个静态属性的示例:
1
2
3
4
5
6
7
8
9
10
11
12
|
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属性,访问方式与其他的静态计算属性一样,通过“类型名”加“.”来访问静态计算属性。
扩展方法
可以在原始类型上扩展方法,包括实例方法和静态方法。这些添加方法的定义与普通方法的定义是一样的。
下面先看一个示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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的值就改变了。
本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747538,如需转载请自行联系原作者