首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Swift 3中编程延迟

如何在Swift 3中编程延迟
EN

Stack Overflow用户
提问于 2016-06-26 01:30:44
回答 4查看 314.7K关注 0票数 376

在Swift的早期版本中,可以使用以下代码创建延迟:

代码语言:javascript
复制
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
    //put your code which should be executed with a delay here
}

但是现在,在Swift 3中,Xcode自动更改了6个不同的东西,但随后出现了以下错误:"Cannot convert DispatchTime.now to expected dispatch_time_t aka UInt64“。

如何在Swift 3中运行代码序列之前创建延迟?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-26 01:30:44

经过大量的研究,我终于弄明白了这一点。

代码语言:javascript
复制
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Change `2.0` to the desired number of seconds.
   // Code you want to be delayed
}

这在Swift 3和Swift 4中创建了所需的“等待”效果。

灵感来自this answer的一部分。

票数 1.1K
EN

Stack Overflow用户

发布于 2019-07-25 19:09:59

一种方法是使用DispatchQueue.main.asyncAfter,因为很多人已经回答了。

另一种方法是使用perform(_:with:afterDelay:)More details here

代码语言:javascript
复制
perform(#selector(delayedFunc), with: nil, afterDelay: 3)

@IBAction func delayedFunc() {
    // implement code
}
票数 4
EN

Stack Overflow用户

发布于 2018-02-28 21:09:50

//x秒后运行函数

代码语言:javascript
复制
public static func runThisAfterDelay(seconds: Double, after: @escaping () -> Void) {
    runThisAfterDelay(seconds: seconds, queue: DispatchQueue.main, after: after)
}

public static func runThisAfterDelay(seconds: Double, queue: DispatchQueue, after: @escaping () -> Void) {
    let time = DispatchTime.now() + Double(Int64(seconds * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
    queue.asyncAfter(deadline: time, execute: after)
}

//使用:-

代码语言:javascript
复制
runThisAfterDelay(seconds: x){
  //write your code here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38031137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档