|
导读
方法
扩展可以为已有类型添加新的实例方法和类型方法。下面的例子为 Int 类型添加了一个名为 repetitions 的实例方法:
extension Int {
func repetitions(task: () -> Void) {
for _ in 0..<self {
task()
}
}
}
这个 repetitions(task: ) 方法接受一个 () -> Void 类型的单参数,表示没有参数且没有返回值的函数。
定义该扩展之后,你就可以对任意整数调用 repetitions(task: ) 方法,将闭包中的任务执行整数对应的次数:
3.repetitions({
print("Hello!")
})
// Hello!
// Hello!
// Hello!
可以使用尾随闭包让调用更加简洁:
3.repetitions {
print("Goodbye!")
}
// Goodbye!
// Goodbye!
// Goodbye!
可变实例方法
通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改 self 或其属性的方法必须将该实例方法标注为 mutating,正如来自原始实现的可变方法一样。
下面的例子为 Swift 的 Int 类型添加了一个名为 square 的可变方法,用于计算原始值的平方值:
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square()
// someInt 的值现在是 9
|
|