22.5. 方法

扩展可以给现有类型添加新的实例方法和类方法。在下面的例子中,给 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