在Swift 2中,我能够使用 dispatch_after
延迟使用大中央调度的动作:
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编写它的首选方法是什么?
11 回答
语法很简单:
注意,上面添加
seconds
作为Double
的语法似乎是一个混乱的来源(特别是因为我们习惯于添加nsec) . 那个“将秒添加为Double
”的语法有效,因为deadline
是一个DispatchTime
,并且在幕后,有一个+
运算符需要Double
并将这几秒钟添加到DispatchTime
:但是,如果您确实要为
DispatchTime
添加整数msec,μs或nsec,还可以将DispatchTimeInterval
添加到DispatchTime
. 这意味着你可以这样做:由于
DispatchTime
类中+
运算符的这种单独的重载方法,这些都可以无缝地工作 .Swift 4:
当时
.seconds(Int)
,也可以使用.microseconds(Int)
和.nanoseconds(Int)
.如果您只想要延迟功能
Swift 4
您可以像以下一样使用它:
在Swift 3发布之后,还必须添加@escaping
Swift 4
你可以在DispatchQueue上创建一个扩展,并添加内部使用
DispatchQueue
asyncAfter函数的函数延迟并使用
接受的答案有点不同的味道 .
Swift 4
拨打
DispatchQueue.main.after(when: DispatchTime, execute: () -> Void)
我强烈建议使用Xcode工具转换为Swift 3(编辑>转换>转换为当前Swift语法) . 它为我 grab 了这个
这在Swift 3中对我有用
您可以使用
试试这个
在Swift 4.1和Xcode 9.4.1中
简单的答案是......