Swift之闭包

其实和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
    }

}

你可能感兴趣的:(Swift之闭包)