iOS开发交流群:301058503
一般的定义:
protocol 协议名称 {
//方法
}
protocol TopViewDelegate {
func action()
}
特殊使用:
一、实例化协议时使用弱引用修饰
weak var topViewDelegate: TopViewDelegate!
此时,就会报错
有两种解决方法:
1、在定义协议时加上@objc
@objc protocol TopViewDelegate {
func action()
}
2、把协议定义成class
protocol TopViewDelegate: class {
func action()
}
二、协议方法可选实现
1、在定义协议时加上@objc,并且把定义可选的方法
@objc protocol TopViewDelegate {
@objc optional func action()
}
2、使用extension实现协议方法(可以为空)
protocol TopViewDelegate {
func action()
}
extension TopViewDelegate {
func action() {
}
}
三、结构体,枚举引用协议
使用mutating关键字修饰方法
protocol TopViewDelegate {
mutating func action()
}
struct TopViewStruct: TopViewDelegate {
mutating func action() {
}
}
注意,此时的协议不能被定义成class类型了
protocol TopViewDelegate: class {
func action() //这里不能使用mutating修饰
}
四、协议里面可以添加属性
protocol TopViewDelegate {
var age: String { get } //要求该属性可读
var name: String { get set } //要求该属性可读可写
}
注意:协议里面的属性要用var定义
使用
定义实例
class TopView: UIView {
weak var topViewDelegate: TopViewDelegate!
}
在按钮事件里面
if topViewDelegate != nil {
topViewDelegate.action!()
}
创建一个AViewContoller
class AViewContoller: UIViewController ,TopViewDelegate{//引入代理
}
创建TopView实例并设置代理
let top = TopView()
self.addSubview(top)
top.topViewDelegate = self
//MARK:-------TopViewDelegate
func action() {
}