扩展可以给现有类型添加新的实例方法和类方法。在下面的例子中,给 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!
通过扩展添加的实例方法同样也可以修改(或 mutating(改变))实例本身。结构体和枚举的方法,若是可以修改 self
或者它自己的属性,则必须将这个实例方法标记为 mutating
,就像是改变了方法的原始实现。
在下面的例子中,对 Swift 的 Int
类型添加了一个新的 mutating 方法,叫做 square
,它将原始值求平方:
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square()
// someInt 现在是 9