十四、Swift3.0之闭包回调传递参数和尾随闭包

通过闭包回调传递参数

//completion是有参数,无返回值的闭包
    func loadData(completion: @escaping (_ result: [String]) -> ()) -> () {
        //将任务添加到队列,指定执行任务的函数。解释:队列调度任务(block或闭包),以同步或异步的方式执行
        DispatchQueue.global().async {
            print("耗时操作,网络数据请求中\(Thread.current)")
            //休眠
            Thread.sleep(forTimeInterval: 3)
            //模拟获取结果
            let json = ["头条","八卦","出大事了"]
            
            //主队列
            DispatchQueue.main.async {
                print("主线程更新UI\(Thread.current)")
                //回调,执行闭包(通过传递的参数)
                //传递异步获取的结果json
                completion(json)
            }
        }
    }

外部的调用形式

     //注意这是一个尾随闭包
      loadData { (result) in
            print("获取的数据\(result)")
       }

关于尾随闭包,说明上面的调用形式实际上是一个尾随闭包。如果函数的最后一个参数是闭包,函数参数可以提前结束,最后一个参数直接使用{}包装闭包的代码。上面这个尾随闭包原本有自己的闭包书写形式,但是当处于代码最后的时候,为了更便于读懂,所以会有尾随闭包的写法,这种尾随闭包的写法让代码更衣读懂。

       //尾随闭包的写法
        loadData { (result) in
            print("获取的数据\(result)")
        }
        //原始形式的写法
        loadData(completion: {(result: [String]) -> () in
             print("获取的数据\(result)")
        })

你可能感兴趣的:(十四、Swift3.0之闭包回调传递参数和尾随闭包)