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

let dispatchTime = dispatch_time(dispatch_time_t(DispatchTime.now()), Int64(seconds * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), block)

现在,为了使它在Swift 4.x中工作,这就是我在第1行中所做的:
let dispatchTime =  DispatchTime(uptimeNanoseconds: UInt64(Int64(seconds * Double(NSEC_PER_SEC))))

我根据前面提到的初始化器描述进行了转换:
创建一个相对于系统时钟的时间,该时钟在启动后滴答作响。
因为他们说它创造了一个相对时间,DispatchTime.now()已经被考虑了。更不用说,我可能错了。请纠正我。
对于第二行,我不知道如何将DispatchTime作为DispatchAfter中的参数传递。

最佳答案

这就是你在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
}

10-08 16:54