协议
使用protocol关键字
形如:
1 | protocol 协议名 { |
一个类需要实现多个协议的用逗号,进行隔开
1 | class DelegateView: BaseViewController,MsgDelegate,DataDelegate { |
协议中的属性
协议中的属性:
1,必须使用var来修饰
2,不允许有默认值
3,只能使用{set get}可读可写,{get}只读来修饰.
4,属性必须要实现赋值
5,使用static进行修饰的属性,需要类实现
1 | protocol CarDelegate { |
协议中的方法
协议中的方法:
1,不能有方法体,只是声明方法
2,方法形参不可以有默认值
3,方法默认都是必须实现的
4,可选方法:需要@objc修饰protocol,对应的方法还要@objc optional修饰
5,异变方法:mutating
默认实现的方法
1 | protocol DataDelegate: AnyObject { |
可选实现方法
1 | @objc protocol MsgDelegate:AnyObject { |
异变方法
1 | //有时一个方法需要改变(或异变)其所属的实例. |
协议是否继承AnyObject
协议可用于结构体,枚举,类
在类中使用,书写的协议时,协议需要继承AnyObject;这样协议可以用weak进行修饰,防止出现实例的循环引用;
不使用NSObjectProtocol,是因为NSObjectProtocol是OC语言的,swift不推荐使用;
用于类之间的协议:AnyObject,需要添加weak来修饰防止循环引用
1 | protocol 协议名 : AnyObject{ |
用于结构体或枚举,不需要使用weak来修饰协议
1 | ///用于结构体或枚举,不需要使用weak来修饰协议 |
The End