擴展可以向已有類型添加新的實例方法和類型方法。下面的例子向Int類型添加一個名為repetitions的新實例方法:
extension Int {
func repetitions(task: () -> ()) {
for i in 0..self {
task()
}
}
}
這個repetitions方法使用了一個() -> ()類型的單參數(shù)(single argument),表明函數(shù)沒有參數(shù)而且沒有返回值。
定義該擴展之后,你就可以對任意整數(shù)調(diào)用repetitions方法,實現(xiàn)的功能則是多次執(zhí)行某任務(wù):
3.repetitions({
println("Hello!")
})
// Hello!
// Hello!
// Hello!
可以使用 trailing 閉包使調(diào)用更加簡潔:
3.repetitions{
println("Goodbye!")
}
// Goodbye!
// Goodbye!
// Goodbye!
通過擴展添加的實例方法也可以修改該實例本身。結(jié)構(gòu)體和枚舉類型中修改self或其屬性的方法必須將該實例方法標(biāo)注為mutating,正如來自原始實現(xiàn)的修改方法一樣。
下面的例子向Swift的Int類型添加了一個新的名為square的修改方法,來實現(xiàn)一個原始值的平方計算:
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square()
// someInt 現(xiàn)在值是 9