其实和oc中的block差不多,但是比block麻烦一点
直接上代码
import UIKit
// 1.定义一个闭包类型
//格式: typealias 闭包名称 = (参数名称: 参数类型) -> 返回值类型
typealias loginBlock = (_ userNameText:String, _ passWordText:String) -> Void
class LoginView: BaseView {
//2. 声明一个变量
var loginValueBlock : loginBlock?
func setLoginViews() -> Void {
loginButton = UIButton.init(type: UIButtonType.system)
loginButton.setTitle("立即登录", for: UIControlState.normal)
loginButton.mas_makeConstraints { (make:MASConstraintMaker?) in
make?.top.equalTo()(passWordTF.mas_bottom)?.offset()(40)
make?.centerX.equalTo()(passWordTF)
make?.height.equalTo()(40)
make?.width.equalTo()(passWordTF)
}
loginButton.addTarget(self, action: #selector(loginAction), for: UIControlEvents.touchDown)
}
@objc func loginAction() -> Void{
print("登录")
//4. 调用闭包,设置你想传递的参数,调用前先判定一下,是否已实现
if loginValueBlock != nil {
loginValueBlock!(userNameTF.text!,passWordTF.text!)
}
}
//3. 定义一个方法,方法的参数为和swiftBlock类型一致的闭包,并赋值给callBack
func loginValue(_ block: @escaping loginBlock) -> Void {
loginValueBlock = block
}
}