发布于 2015-06-14 01:54:37 | 160 次阅读 | 评论: 0 | 来源: 网络整理
扩展可以向已有类型添加新的实例方法和类型方法。下面的例子向Int
类型添加一个名为repetitions
的新实例方法:
extension Int {
func repetitions(task: () -> ()) {
for i in 0..self {
task()
}
}
}
这个repetitions
方法使用了一个() -> ()
类型的单参数(single argument),表明函数没有参数而且没有返回值。
定义该扩展之后,你就可以对任意整数调用repetitions
方法,实现的功能则是多次执行某任务:
3.repetitions({
println("Hello!")
})
// Hello!
// Hello!
// Hello!
可以使用 trailing 闭包使调用更加简洁:
3.repetitions{
println("Goodbye!")
}
// Goodbye!
// Goodbye!
// Goodbye!
通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改self
或其属性的方法必须将该实例方法标注为mutating
,正如来自原始实现的修改方法一样。
下面的例子向Swift的Int
类型添加了一个新的名为square
的修改方法,来实现一个原始值的平方计算:
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square()
// someInt 现在值是 9