Swift之GCD的变化

GCD在swift中有一些变化,大概是这样的,大家可以去wwdc看看具体的内容。

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    //‘尾’随闭包
    //如果函数的最后一个参数是闭包,函数参数可以提前结束,最后一个参数直接使用{}包装闭包的代码
//        loadData { (jieguo) in
//            print("获取的新闻数据 \(jieguo)")
//        }
    //关于尾随闭包
    // 要能看懂
    //能够慢慢编写 大多数xcode的智能提示可以补全
 
    //函数本身编写的结果
    
    loadData(completion: { (jie) -> () in
        print(jie)
    })
}

func demo() ->() {
    //尾随闭包
    DispatchQueue.global().async {
        //嵌套的 gcd xcode不会变成尾随的闭包
        DispatchQueue.main.async(execute: { 
            
        })
    }
}

/**
 在异步执行任务,获取结果,通过block/闭包 回调
 闭包的应用场景和block完全一致
*/

   func loadData(completion: @escaping ([String])->()) -> (){
        //将任务添加到队列,指定执行的任务函数
        //翻译:队列调度任务(block/闭包),以同步/异步的方式执行
        DispatchQueue.global().async {
            
            print("耗时操作 \(Thread.current)")
            //休眠
            Thread.sleep(forTimeInterval: 1.0)
            //获得结果
            let json = ["头条","出事了","八卦"]
            
            //主队列回调
            DispatchQueue.main.async {
                print("主线程更新UI \(Thread.current)")
                
                //回调 -》执行闭包(通过参数传递的)
                //传递异步获取的结果
                completion(json)
            }
        }
    

 }
}

对于尾随闭包我的理解也不是很透彻,后面理解的再深一点,然后再补充在这儿。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容