Extensions

Swift 中的 extension 就像是 objc 中的 category,可以擴充任何的 class,但是在 Swift, extension 可以擴充任何「有名字」的東西,例如,我們擴充 Size class

extension Size {
   mutating func increaseByFactor(factor: Int) {
       width *= factor
       height *= factor
   }
}

這樣所有 Size 的 instance 都可以用 increaseByFactor


更進一步,我們也可以擴充「原生」的 class

extension CGSize {
   mutating func increaseByFactor(factor: Int) {
       width *= factor
       height *= factor
   }
}

我們可以擴充 Core Graphic 中的 CGSize


既然我們剛剛,可以擴充任何「有名字」的東西,那麼,我們還可以擴充 Int

extension Int {
   func repetitions(task: () -> ()) {
       for i in 0..self {
           task()
       }
   }
}

這有什麼好處呢?好處可多的呢,我們可以在 Swift 中對任意的 Int 執行 repetitions

500.repetitions({
   println("Hello!")
})

而我們在 Closures 中有提到 Trailing Closures,因此我們可以把程式碼再簡化:

500.repetitions {
   println("Hello!")
}

這樣寫起來真是太太太方便了!終於知道為什麼會有 Trailing Closures 這樣的功能了!

Swift 中的 extensions 很強大!

下一篇: Generics