Swift中的协议就是我们通常所说的接口,它连接了软件和软件模块,非常重要。首先定义一个协议:
protocol CgProtocol { }
协议也有基协议:
protocol CgProtocol : NSObjectProtocol { }
协议是可以多继承的。
现在写一个协议方法,协议方法必须实现。比如我们写一个比较的方法
protocol CgProtocol : NSObjectProtocol { func compare(value :Int) ->Bool }
定义一个类,如果一个类要继承父类,又要遵守协议,那么父类应该放到协议之前,形式如下:
class 类名 : 父类, 协议1,协议2 {
//遵守协议的内容
}
如果接口继承了NSObjectProtocol,那么遵守这个协议的类就应该首先继承NSObejct类,因为按照接口中方法必须被实现的原则,NSObject中实现了NSObjectProtocol中的全部方法。我们实现在类ClassA中遵守接口CgProtocol中的方法:
protocol CgProtocol : NSObjectProtocol { func compare(value : Int) ->Bool } class ClassA : NSObject,CgProtocol { func compare(value : Int) ->Bool{ return true } }现在完善compare方法,代码如下:
class ClassA : NSObject,CgProtocol { var age = 0; init(age:Int){ self.age = age } func compare(value : Int) ->Bool{ if age > value { return true } else { return false } } } let classA = ClassA(age: 100) let ret = classA.compare(50) println("ret is \(ret)")
运行结果如图:
下面来讲一下强行转换的问题,classA遵守CgProtocol协议,我们可以把classA强行转化成CgProtocol,格式如下:
let p1 = classA as CgProtocol