相信大家在 oc 中都會(huì)用到過(guò) dispatch_after() { code... } 函數(shù),是用來(lái)延遲執(zhí)行一段代碼。
GCD 在 Swift 中又是怎么用的呢?
早在 Swift 2.3 時(shí),曾仿 oc 的 dispatch_after 函數(shù)寫(xiě)過(guò)一個(gè) Swift 版 dispatch_after 代碼塊,可是由于項(xiàng)目原因一年多幾乎沒(méi)碰Swift,直到近來(lái)在用到時(shí)發(fā)現(xiàn)出錯(cuò)了,看 API 才知道已經(jīng)有所更改。在此與大家分享。
01:oc 版 dispatch_after

【注意這里 “PER” 是 “每” 的意思。比如 “NSEC_PER_SEC” 通俗來(lái)說(shuō)就是 “每秒是多少納秒”,相當(dāng)于將秒轉(zhuǎn)換為納秒的常數(shù)。 舉例說(shuō)明下:要將5秒轉(zhuǎn)為納秒,那就是 5 * NSEC_PER_SEC ?!?/p>
02:再來(lái)看下 Swift 2.3 版本的

基本寫(xiě)法跟 oc 一致,但是在 Swift 4.0 之后已經(jīng)有提示讓換成 DispatchQueue...... 的形式了。
03:swift 4.0 版本

對(duì)比3個(gè)版本可以看出,內(nèi)容沒(méi)變但是格式變化了。
其實(shí)在 Swift 3.0 之后的 GCD 就變成了 DispatchQueue.main / DispatchQueue.global 的形式,
這種形式更容易理解,那就是:
【 隊(duì)列 (調(diào)度) 任務(wù) (執(zhí)行)代碼】
【 DispatchQueue . main . asyncAfter (params) { code...... } 】
這樣子的代碼是不是跟隊(duì)列調(diào)度任務(wù)的原理一致呢?
此處的 dispatch_after 問(wèn)題解決了,同時(shí)也引出了 Swift 使用GCD 的基本格式。
值得注意的是 GCD 的嵌套使用,還會(huì)涉及到 尾隨閉包 的知識(shí)點(diǎn)等等,在后面的文章中會(huì)單獨(dú)介紹。