在oc 中经常用到blcok 代替 prtocol 来进行回调 代码更加简洁,但是在swift 中我们通常会用 闭包表达式来进行回调传值,基础语法请百度自行补脑。
上面的博客中自定义了AlertView 用 protocol 进行了回调
代码如下
@objc protocol SwiftCustomAlertViewDelegate : NSObjectProtocol{
optional func selectOkButtonalertView()
optional func selecttCancelButtonAlertView()
}
if delegate?.respondsToSelector(Selector("selecttCancelButtonAlertView")) == true {
print("cancelDelegate")
delegate?.selecttCancelButtonAlertView!()
}
if delegate?.respondsToSelector(Selector("selectOkButtonalertView")) == true {
delegate?.selectOkButtonalertView!()
}
下面用闭包表达式代替他们,先定义俩哥哥闭包表达式的变量
//没有回调
var clickedCancelButtonAction:((Void)->(Void))? //回调button tag var clickedOkButtonAction:((buttonTag:NSInteger)->(Void))?
if clickedCancelButtonAction != nil {
clickedCancelButtonAction!()
}
if clickedOkButtonAction != nil {
clickedOkButtonAction!(buttonTag:button.tag)
}
在调用的控制器里接受
let alertView = SwiftCustomAlertView(title:"swift",message:"custom swift alert",delegate: self)
alertView .show();
alertView.clickedCancelButtonAction = {
print("selectCancel")
}
alertView.clickedOkButtonAction = {(buttonTag)->Void in
print("Button tag \(buttonTag)")
}