美文网首页iOS-swiftios专题Swift开发
十四、Swift3.0之闭包回调传递参数和尾随闭包

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

作者: ZhengYaWei | 来源:发表于2017-02-24 00:47 被阅读1036次

    通过闭包回调传递参数

    //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之闭包回调传递参数和尾随闭包

        本文链接:https://www.haomeiwen.com/subject/fvpiwttx.html