如何在Swift 3和4中编写dispatch_after GCD? [英] How do I write dispatch_after GCD in Swift 3 and 4?

查看:123
本文介绍了如何在Swift 3和4中编写dispatch_after GCD?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Swift 2中,我能够使用 dispatch_after 来延迟使用大中央调度的行动:

In Swift 2, I was able to use dispatch_after to delay an action using grand central dispatch:

var dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
    // your function here 
})

但这似乎不再在Swift 3(或4)中编译。在Swift 3中使用新的Dispatch API编写它的首选方法是什么?

But this no longer seems to compile in Swift 3 (or 4). What is the preferred way to write this in Swift 3 (using the new Dispatch API)?

推荐答案

语法很简单:

// to run something in 0.1 seconds

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
    // your code here
}






注意,上面添加作为 Double 的语法似乎是混乱的来源(特别是因为我们习惯于添加nsec)。 将秒加为 Double 语法有效,因为截止日期 DispatchTime 并且,在幕后,有一个 + 运算符,它将采用 Double 并添加那么多秒到 DispatchTime


Note, the above syntax of adding seconds as a Double seems to be a source of confusion (esp since we were accustomed to adding nsec). That "add seconds as Double" syntax works because deadline is a DispatchTime and, behind the scenes, there is a + operator that will take a Double and add that many seconds to the DispatchTime:

public func +(time: DispatchTime, seconds: Double) -> DispatchTime

但是,如果你真的想要将整数msec,μs或nsec添加到 DispatchTime ,您还可以将 DispatchTimeInterval 添加到 DispatchTime 。这意味着你可以这样做:

But, if you really want to add an integer number of msec, μs, or nsec to the DispatchTime, you can also add a DispatchTimeInterval to a DispatchTime. That means you can do:

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
    os_log("500 msec seconds later")
}

DispatchQueue.main.asyncAfter(deadline: .now() + .microseconds(1_000_000)) {
    os_log("1m μs seconds later")
}

DispatchQueue.main.asyncAfter(deadline: .now() + .nanoseconds(1_500_000_000)) {
    os_log("1.5b nsec seconds later")
}

由于这种单独的重载方法,所有这些都无缝地工作对于 DispatchTime 类中的 + 运算符。

These all seamlessly work because of this separate overload method for the + operator in the DispatchTime class.

public func +(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTime

这篇关于如何在Swift 3和4中编写dispatch_after GCD?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆