设置代理:
//MARK: - 代理方法
@objc protocol LGDelegate {
func requiredMethod()//必选方法
@objc optional func optionalMethod()//可选方法
};
添加代理属性
weak var lgDelegate : LGDelegate ?
PS :看到有些博客些的是前面不带weak, 参考了 Swift - 委托(delegate)的介绍,及使用样例 里面的回复说 前面可以不需要加weak,两个类对象如果都强引用对方,才会导致内存泄露。单向引用没问题。 对于这个问题,简单写了个demo测试.看最后面的截图
代理方法实现判断
extension LGKeyboard {
func delegateMethod() {
self.lgDelegate?.requiredMethod()
self.lgDelegate?.optionalMethod?()
}
}
在编写swift协议中自定义了可选方法之后的判断则可以利用swift的可空链直接由系统进行判断,不用自己写responseToSelector方法来进行代理对象是否实现的判断:
@objc protocol xxxdelegate { optional func method()};
定义一个协议,并给其添加一个可选的方法
在类中使用的时候则可以直接通过可空链判断:
delegate?.method?()
对于可空链,第一个问号会判断delegate是否存在,如果不存在,则直接返回nil,如果存在,则调用method,method后的问号,会直接对该方法进行判断,如果代理对象实现了method,则调用method在代理对象中的实现,如果代理对象没有实现该可选的method,则返回空,并且不会造成程序崩溃。