一、swift代理如何使用?
1.定义协议&代理变量&调用代理方法:
//定义协议
protocol AJImgPickerControllerDelegate: NSObjectProtocol {
//返回选中的图片
func backChoosedImages(choosedImages: [AJImgPickerCellModel]?)
}
//定义代理属性
weak var delegate:AJImgPickerControllerDelegate?
//调用代理方法
self.delegate?.backChoosedImages(choosedImages: self?.choosedDataSource)
2.遵循代理&重写代理方法
vc.delegate = self
//MARK: - AJImgPickerControllerDelegate
extension PublishDynamicController: AJImgPickerControllerDelegate {
func backChoosedImages(choosedImages: [AJImgPickerCellModel]?) {
//...
}
}
二、如果有些代理方法不是必须遵守的,怎么办?
- 按照上面的方式定义代理方法,会导致delegate需要实现所有的代理方法,而很多时候,代理方法是否实现,是可选的。
1.可选代理的定义
@objc protocol SingSoundEvaluatinToolDelegate: NSObjectProtocol {
//测评停止并返回测评结果
func oralEvaluatingDidEnd(withResult result: [AnyHashable : Any]!, isLast: Bool)
//测评开始
@objc optional func oralEvaluatingDidStart()
}
//调用必须实现的代理方法
self.delegate?.oralEvaluatingDidEnd(withResult: result, isLast: isLast)
//调用可选的代理方法
self.delegate?.oralEvaluatingDidStart?()
网友评论