Swift3.0 中的GCD

作者: Stormstout | 来源:发表于2016-08-03 00:13 被阅读80次
    //在viewDidLoad中实现
     //尾随闭包
            //如果函数最后一个参数是闭包,函数参数可以提前结束,最后一个参数直接使用 {} 包装闭包代码
            loadData { (result) in
                print("获取的数据: \(result)")
            }
            
    //        //按照函数本身编写的结果
    //        loadData(completion: { (result) -> () in
    //            print(result)
    //        })
            
            //尾随闭包
            DispatchQueue.global().async { 
                
                //嵌套的 gcd Xcode 不会改成尾随闭包
                DispatchQueue.main.async(execute: { 
                    //可以将上面的 ' execute ' 和 ' ) '删了
                    /*
                     DispatchQueue.main.async({
                     }
                    */
                })
            }
    //========下面实现loadData方法
         func loadData(completion:(result : [String] )->()) -> ( )
        {
            //将任务添加到队列,指令执行任务的函数
            //以 同步 / 异步 的方式来执行
            
            DispatchQueue.global().async { 
                print("耗时操作 \(Thread.current)")            //输出结果 : 耗时操作 <NSThread: 0x60000007c840>{number = 3, name = (null)}
    
                //休眠
                Thread.sleep(forTimeInterval:1.0)
                
                //获取结果
                let json = ["国内" , "国际" , "科技"]
                
                //主队列回调
                DispatchQueue.main.async(execute: { 
                    print("主线程更新 UI \(Thread.current)")
                    
                    //回调 -> 执行 闭包(通过参数传递)
                    completion(result: json)
                    
                })
            }
        }
    
    

    相关文章

      网友评论

        本文标题:Swift3.0 中的GCD

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