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