相信大家在 oc 中都会用到过 dispatch_after() { code... } 函数,是用来延迟执行一段代码。
GCD 在 Swift 中又是怎么用的呢?
早在 Swift 2.3 时,曾仿 oc 的 dispatch_after 函数写过一个 Swift 版 dispatch_after 代码块,可是由于项目原因一年多几乎没碰Swift,直到近来在用到时发现出错了,看 API 才知道已经有所更改。在此与大家分享。
01:oc 版 dispatch_after
dispatch_after.png
【注意这里 “PER” 是 “每” 的意思。比如 “NSEC_PER_SEC” 通俗来说就是 “每秒是多少纳秒”,相当于将秒转换为纳秒的常数。 举例说明下:要将5秒转为纳秒,那就是 5 * NSEC_PER_SEC 。】
02:再来看下 Swift 2.3 版本的
image.png
基本写法跟 oc 一致,但是在 Swift 4.0 之后已经有提示让换成 DispatchQueue...... 的形式了。
03:swift 4.0 版本
dispatch_after Swift.png
对比3个版本可以看出,内容没变但是格式变化了。
其实在 Swift 3.0 之后的 GCD 就变成了 DispatchQueue.main / DispatchQueue.global 的形式,
这种形式更容易理解,那就是:
【 队列 (调度) 任务 (执行)代码】
【 DispatchQueue . main . asyncAfter (params) { code...... } 】
这样子的代码是不是跟队列调度任务的原理一致呢?
此处的 dispatch_after 问题解决了,同时也引出了 Swift 使用GCD 的基本格式。
值得注意的是 GCD 的嵌套使用,还会涉及到 尾随闭包 的知识点等等,在后面的文章中会单独介绍。
网友评论