GCD在swift中有一些變化,大概是這樣的,大家可以去wwdc看看具體的內(nèi)容。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//‘尾’隨閉包
//如果函數(shù)的最后一個(gè)參數(shù)是閉包,函數(shù)參數(shù)可以提前結(jié)束,最后一個(gè)參數(shù)直接使用{}包裝閉包的代碼
// loadData { (jieguo) in
// print("獲取的新聞數(shù)據(jù) \(jieguo)")
// }
//關(guān)于尾隨閉包
// 要能看懂
//能夠慢慢編寫 大多數(shù)xcode的智能提示可以補(bǔ)全
//函數(shù)本身編寫的結(jié)果
loadData(completion: { (jie) -> () in
print(jie)
})
}
func demo() ->() {
//尾隨閉包
DispatchQueue.global().async {
//嵌套的 gcd xcode不會(huì)變成尾隨的閉包
DispatchQueue.main.async(execute: {
})
}
}
/**
在異步執(zhí)行任務(wù),獲取結(jié)果,通過block/閉包 回調(diào)
閉包的應(yīng)用場(chǎng)景和block完全一致
*/
func loadData(completion: @escaping ([String])->()) -> (){
//將任務(wù)添加到隊(duì)列,指定執(zhí)行的任務(wù)函數(shù)
//翻譯:隊(duì)列調(diào)度任務(wù)(block/閉包),以同步/異步的方式執(zhí)行
DispatchQueue.global().async {
print("耗時(shí)操作 \(Thread.current)")
//休眠
Thread.sleep(forTimeInterval: 1.0)
//獲得結(jié)果
let json = ["頭條","出事了","八卦"]
//主隊(duì)列回調(diào)
DispatchQueue.main.async {
print("主線程更新UI \(Thread.current)")
//回調(diào) -》執(zhí)行閉包(通過參數(shù)傳遞的)
//傳遞異步獲取的結(jié)果
completion(json)
}
}
}
}
對(duì)于尾隨閉包我的理解也不是很透徹,后面理解的再深一點(diǎn),然后再補(bǔ)充在這兒。