在早期版本的Swift中,可以使用以下代码创建延迟:
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个不同的内容,但随后出现以下错误:“无法将 DispatchTime.now
转换为预期值 dispatch_time_t
又名 UInt64
. ”
如何在Swift 3中运行一系列代码之前创建延迟?
6 回答
经过大量的研究,我终于想到了这个 .
这在Swift 3和Swift 4中创建了所需的“等待”效果 .
灵感来自this answer的一部分 .
我喜欢GCD的单行表示法,它更优雅:
此外,在iOS 10中我们有新的Timer方法,例如块初始化器:
(因此可能会取消延迟行动)
顺便说一句,请记住:默认情况下,计时器被添加到默认的运行循环模式 . 这意味着当此循环模式处于保持状态时(例如,滚动UIScrollView时)可能会冻结计时器 . 您可以通过将计时器添加到特定的运行循环模式来解决此问题:
在这个blog post你可以找到更多细节 .
尝试 Swift 3.0 and above 中实现的以下功能
用法
请尝试以下代码进行延迟
// MARK:First Way
// MARK:第二种方式
//在x秒后运行功能
//使用:-
我在Swift 4中这样做:
这一行代码阻塞当前线程,直到指定的时间结束 . 延迟时间以日期格式定义 . 上面使用的Date初始化程序版本只采用Double格式的第二个值 . 该值可能具有毫秒级的分辨率 .
请注意,如果在主线程上调用此代码,UI将冻结指定的时间 .