委托在我的理解是:A要做的事情很多忙不过来或事情需要别人帮忙才能做成,就把其中一些事情通过协议委托给B做。
具体步骤是:首先A需要先定义协议(协议里包括需要B做的事),然后在需要B做事的时候通过之前定义的协议发出委托;而B需要做的是先实现协议,然后在接到委托的时候做事。
第一步:A定义协议
//定义委托协议 -- 任何遵循exampleDelegate协议的类都要实现SaveBtnWillClick()实例方法
protocol exampleDelegate: NSObjectProtocol {
//回调(A需要B在用户按保存按键时做出反应)
func SaveBtnWillClick()
}
第二步:在需要用到代理回调的类中定义委托对象
class ExampleViewController: UIViewController {
//定义一个属性保存代理对象,一定要加上weak,避免循环引用
weak var delegate: exampleDelegate?
}
第三步:在需要发出消息的地方(保存按键点击事件)检查委托对象是否实现协议方法,然后调用该方法
class ExampleViewController: UIViewController {
//定义一个属性保存代理对象,一定要加上weak,避免循环引用
weak var delegate: exampleDelegate?
@IBAction func btnSaveClick(_ sender: Any) {
delegate?.SaveBtnWillClick()
}
}
第四步:在委托对象类(即B)实现协议方法
//在AnotherViewController类中实现examleDelegate协议
class AnotherViewController: UIViewController, exampleDelegate {
//MARK: exampleDelegate协议中的方法
func SaveBtnWillClick() {
//exampleView的保存按钮点击了,做点事吧
}
}