Swift协议和扩展(四)

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    }

}

你可能感兴趣的:(Swift协议和扩展(四))