Swift 闭包

 第一步  定义闭包

typealias swiftBlock = (_ str: String) -> Void

 第二步   声明

var callBack : swiftBlock? //第二步 声明

 第三步   实现闭包

func callBackBlock(_ block: @escaping swiftBlock) { // 第三步 实现闭包

        callBack = block

    }

 第四步   触发闭包

if callBack != nil {  // 第四步 触发闭包

            callBack!("闭包传值")

        }

第五步   触发闭包回调

cusVC.callBackBlock { (str) in  //第五步 触发闭包回调

            print(str)

        }


测试

1、Swift:闭包Closure

FirstViewController.swift

import UIKit

/**

* 1、 声明一个闭包别名,闭包含字符串类型的两个参数,无返回值(使用“()”或者“Void”都一样)

*/

typealias SwiftClosure = (name:String,age:Int) -> Void

class FirstViewController: UIViewController {

    override funcviewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor =UIColor.whiteColor()

//创建push按钮let button

= UIButton.init(frame: CGRectMake(200, 200, 100, 100))

        button.setTitle("Push", forState: .Normal)

        button.center = self.view.center

        button.backgroundColor = UIColor.greenColor()

        button.setTitleColor(UIColor.redColor(), forState: .Normal)

        button.addTarget(self, action: #selector(PushSecondViewController), forControlEvents: .TouchUpInside)

        self.view.addSubview(button)

    }


    /**

    *  2、定义闭包属性,可选类型

    */varcallBackClosure = SwiftClosure?()

    /**

    * 3、 闭包触发调用后,对闭包属性赋值,同时提供调用外部访问闭包中数值的接口

    */    

func callBackClosureFunction(closure:SwiftClosure){

        callBackClosure = closure

    }

    /**

    *  4、定义触发闭包调用的方法,此时需要将要传递的参数存入闭包中

    *  此处我将参数固定死了,开发中根据需要自己可以将需要的数值当做方法的参数,其实就是给方法添加参数即可,由外部决定参数值

    *  例如: func TriggerClosure(name:String,age:Int) -> Void { }

    */  

  func TriggerClosure(){


        ifcallBackClosure != nil {

            callBackClosure!(name:"夏远全",age:26)

        }

    }

    /**

    *  Push第二个控制器入栈

    */    

func PushSecondViewController() -> Void {

        self.navigationController?.pushViewController(SecondViewController(), animated:true)

    }

}

SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {

    /**

    *  5、创建第一个控制器实例

    */    

let firstVC = FirstViewController()

    override func viewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor = UIColor.purpleColor()


        /**

        * 6、接收闭包触发后回传的数值并打印

        */       

 firstVC.callBackClosureFunction { (name, age) in            

            print("name:\(name), age:\(age)")

        }

    }


    /**

    *  点击屏幕触发闭包

    */    override func touchesBegan(touches: Set, withEvent event: UIEvent?) {

        firstVC.TriggerClosure()

    }


}

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