转自:http://blog.csdn.net/xn4545945/article/details/39800061
Swift中的协议能被类, 枚举,结构体实现.
- protocol SomeProtocol{
-
- }
-
- class SomeClass : SomeProtocol{
-
- }
2.1 协议中属性/方法/突变方法的要求
2.1.1 属性的要求
- protocol AnotherProtocol1{
-
- class var property : Int { get set}
- }
-
- class AnotherClass1 : AnotherProtocol1{
- class var property : Int {
- get{
- return 10
- }
- set{
-
- }
- }
- }
2.1.2 方法要求
-
- protocol AnotherProtocol2{
- func myFunc() -> Int
- }
-
- class AnotherClass2 : AnotherProtocol2{
- func myFunc() -> Int {
- return 10
- }
- }
2.1.3 突变方法要求
能在方法或函数内部改变实例类型的方法称为突变方法. (mutating关键字)
在类中,可以不写mutating, 但在结构体与枚举中国必须写
- protocol Togg{
- mutating func togg()
- }
-
- enum OnOffSwitch : Togg{
- case Off , On
-
- mutating func togg() {
- switch self{
- case .Off:
- self = On
- case .On:
- self = Off
- }
- }
- }
-
- var lightSwitch = OnOffSwitch.Off
- lightSwitch.togg()
2.2 协议类型.
协议也可以当做类型来使用. 这点和函数一样.
1.可作为参数/返回值类型
2.可作为常量/变量/属性的类型
3.可作为数组/字典和其他元素类型
- protocol MyRect{
- func myLuckNumber() -> Int
- }
-
- class MyRectImp : MyRect{
- func myLuckNumber() -> Int {
- return 10
- }
- }
-
- class Dice {
- let sides :Int
- var gener : MyRect
- init(sides:Int, gener:MyRect){
- self.sides = sides
- self.gener = gener
- }
- }
-
- var dice = Dice(sides: 6, gener: MyRectImp())
- dice.gener.myLuckNumber()