swift -- 闭包

<1>闭包的声明(别名)

typealias myBlock : (text : String!)  -> Void

<2>声明闭包属性

var block : myBlock!

<3>实现闭包 (在其他类中)

nextVC.block = {text in

  self.label!.text = text     //将值给label

}

<4>调用闭包(传值)

self.block(text : self.textField!.text!)    //传textField中的文本

 

****swift 3.0********

//1.简单的闭包

        // () -> () 没有参数,没有返回值的函数

        //都没有,in 可以一起省略

        let b1 = {

            print("hell")

        }

        //执行闭包

        b1();

        

        //2.带参数的闭包

        //闭包中的参数,返回值,实现 的代码都卸载{}

        //{(形参列表) -> (返回值类型)   ...实现代码}

        //需要使用关键字 in 用于分隔 定义 和实现

        let b2 = {(x: Int) -> () in

            

            print(x );

        }

        b2(121)

        

        //3.带参数 带返回值的闭包

        let b3 = {(x: Int) -> Int in

            return x + 33;

            

        }

        

        print( b3(100) );

 

 

使用场景:

 

一.异步回调

 

 override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

//尾随闭包

//如果函数的最后一个参数是闭包,函数可以提前结束,最后一个参数直接用{}包装闭包的代码

        loadDAta { (result) in

            print("获取的数据:\(result)")

        }

    }

 

    

    /**

        异步执行任务,获取结果,通过block/闭包 回调

        闭包的应用场景和block一样

    */

    func  loadDAta(completion:@escaping (_ result: [String]) ->() )  {

        //GCD 将任务添加到队列中,指定执行任务的函数

        

        DispatchQueue.global().async {

            //耗时操作

            print("耗时操作:\(Thread.current))")

            

            Thread.sleep(forTimeInterval: 1);

            //获得结果

            let json = ["头条","abc","哈哈"];

            //执行闭包,传递异步获取的结果

            completion(json);

            

            

            DispatchQueue.main.async {

                print("主线程更新UI\(Thread.current)")

            }

            

        }

        

        

    }

 

二,界面间反向传值

 

//1.第二个界面的属性

 

//定义个闭包类型(别名)

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

 

class OneViewController: UIViewController {

 

  //(1)定义闭包属性

    var myClosure:Myclosure?

    

    

    @IBAction func poppppppp(_ sender: Any) {

    

    //(2)执行闭包

        myClosure!("hello")

        

        self.dismiss(animated: true) { 

            

            

        }

        

    }

 

 //2. 第一个界面 给闭包 赋值

  @IBAction func click(_ sender: Any) {

        

        let oneVC = OneViewController();

        

    //(3)给闭包赋值,并获取回调内容

        oneVC.myClosure = {(str) ->Void in

            

            print("回到:\(str)")

            

        }

        

        self.present(oneVC, animated: true, completion: nil)

        

        

    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/daxueshan/p/5586593.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值