swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类
extension Int { var doubled : Int { return self * 2 } func multiplyWith(anotherNumber: Int) -> Int { return self * anotherNumber } }
测试代码如下:
2.doubled // = 4 4.multiplyWith(32) // = 128
扩展甚至还可以使类型实现某个协议
下面这个例子在其它语言看来有些怪异,但在swift来说却是稀疏平常
protocol Blinking { var isBlinking : Bool { get } var blinkSpeed: Double { get set } func startBlinking(blinkSpeed: Double) -> Void } extension Int : Blinking { var isBlinking : Bool { return false; } var blinkSpeed : Double { get { return 0.0; } set { // Do nothing } } func startBlinking(blinkSpeed : Double) { println("I am the integer \(self). I do not blink.") } }
测试代码如下:
2.isBlinking // = false 2.startBlinking(2.0) // prints "I am the integer 2. I do not blink."