1. 协议, 协议可以看成一个类的需求清单, 类可以声明它们拥有这些属性和方法. 协议看起来和类非常相似, 只是没有提供任何实际的代码, 只是定义了类的属性和函数, 以及如何访问他们.
protocol Blinking { //声明协议
var isBlinking: Bool{ get } //这个属性必须(至少是)可获取的
var blinkSpeed: Double { get set } //这个属性至少是可获取可设置的
//这个函数必须存在, 做什么有实现者决定
func startBlinking(blinkSpeed: Double) -> void
}
有了协议就可以创建遵循协议的类, 当一个类遵循了一个协议, 就要实现协议中所有的属性和方法. 除此之外还可以遵循多个协议, 使用协议的好处: 利用Swift类型体系, 可以引用任何遵循某一给定协议的对象. 因为只关注一个对象是否遵循协议时, 这个类的具体类型是无关紧要的.
class Light : Blinking {
var isBlinking: Bool = false
var blinkSpeed: Double = 0.0
func startBlinking(blinkSpeed: Double) {
println("I am now blinking"); isBlinking = true;
self.blinkSpeed = blinkSpeed;
}
}
var aBlinking : Blinking? //可以是任何具有Blinking协议的对象
aBlinking = Light()
aBlinking?.startBlinking(4.0) //在变量名后面加?: 尝试使用对象之前查看是否有值
2. 扩展, 在Swift中扩展可以增加更多方法和计算属性, 有点: 不必修改源码增加功能, 可以按功能划分到不同部分, 提高可读性. 可以扩展任何类型, 内置类型和自己编写的类. 要创建一个扩展, 可以使用extension关键字, 一旦扩展一个类型, 就可以调用已经增加的函数和属性, 注意: 在扩展一个类型时, 扩展中定义的函数和属性会增加到该类型的每个实例中.
extension Int {
var doubled: Int { return self * 2 }
func multiplyWith(anotherNumber: Int) -> Int { return self * anotherNumber }
}