美文网首页
Swift 4.0 GCD 中的 dispatch after

Swift 4.0 GCD 中的 dispatch after

作者: 游龙飞雪 | 来源:发表于2018-02-12 10:13 被阅读728次

    相信大家在 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 的嵌套使用,还会涉及到 尾随闭包 的知识点等等,在后面的文章中会单独介绍。

    相关文章

      网友评论

          本文标题:Swift 4.0 GCD 中的 dispatch after

          本文链接:https://www.haomeiwen.com/subject/hqdrtftx.html