在 DispatchAfter 中将 DispatchTime 作为参数传递

Nit*_*ish 0 grand-central-dispatch ios swift

我正在处理一些旧代码。以下是我无法转换或理解的两行(旧代码):

let dispatchTime = dispatch_time(dispatch_time_t(DispatchTime.now()), Int64(seconds * Double(NSEC_PER_SEC)))  
dispatch_after(dispatchTime, dispatch_get_main_queue(), block)  
Run Code Online (Sandbox Code Playgroud)

现在,为了让它在Swift 4.x 中工作,这就是我为第 1 行所做的:

let dispatchTime =  DispatchTime(uptimeNanoseconds: UInt64(Int64(seconds * Double(NSEC_PER_SEC))))  
Run Code Online (Sandbox Code Playgroud)

我根据此处提到的初始化程序描述进行了此转换:

创建一个相对于系统时钟的时间,自启动以来滴答作响。

既然他们说它创建了一个相对时间DispatchTime.now()就已经考虑过了。更不用说,我可能是错的。请纠正我。

对于第二行,我不知道如何DispatchTimeDispatchAfter.

Mil*_*sáľ 6

这就是您在 Swift 3+ 中想要的:

let seconds = 2.0
// dispatchTime 2 seconds from now:
let dispatchTime: DispatchTime = DispatchTime.now() + seconds
DispatchQueue.main.asyncAfter(deadline: dispatchTime) {
    // code to be executed
}
Run Code Online (Sandbox Code Playgroud)