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)
})
}
}