Swift开发Swift编程

Swift3.0 中的GCD

2016-08-03  本文已影响80人  Stormstout
//在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)
                
            })
        }
    }

上一篇下一篇

猜你喜欢

热点阅读