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)
}
}
}
}
对于尾随闭包我的理解也不是很透彻,后面理解的再深一点,然后再补充在这儿。