【问题标题】:How does DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) work in Swift 3?DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) 在 Swift 3 中如何工作?
【发布时间】:2017-04-01 10:00:37
【问题描述】:

在 Swift 3 中,GCD 的语法发生了很大变化。

对 dispatch_after() 的调用现在如下所示:

DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {//do something}

该代码将在调用块 5 秒后调用该块。

它是如何工作的?文档说截止日期参数是dispatch_time_t,它是 UInt64 的类型别名。我认为这是一个以纳秒为单位的马赫时间。但是,.now() + delay 语法将小数秒添加到值中。 DispatchTime.now() 不返回 UInt64 吗?如果是这样,添加小数秒不应该工作。如果有的话,我希望添加到 .now() 的值被视为纳秒,这不是很有用。

(在 swift 2 中,您过去必须将该值乘以一个常数以获得每秒的纳秒数。)

【问题讨论】:

    标签: swift grand-central-dispatch dispatch-after


    【解决方案1】:

    好的,我在这个帖子中找到了我自己的问题的答案:

    How do I write dispatch_after GCD in Swift 3?

    显然有一个 + 运算符的覆盖,它接受一个 DispatchTime 和一个双精度,将双精度视为十进制秒,并返回一个结果 DispatchTime

    【讨论】:

    • 如果您在 Xcode 中按命令单击 +,您将看到声明。
    • @MartinR,感谢您的建议。为了做到这一点,我必须意识到这是对正在执行此操作的 + 运算符的覆盖。
    • 在我看来,我们需要这种调用的形式,它需要一个延迟值,而不是相对于当前马赫时间的时间,因为这可能是应用程序开发人员最常用的形式。这将是一个非常简单的扩展,但它应该是内置的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多