我的应用使用NSTimer
对象的多个线程。
在一个函数中(随机时间随机调用,而不是固定的延迟)我希望它暂停整个应用程序,只暂停1 second
的线程。我有以下代码:
[self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ];
哪个是客观C,我尝试将其翻译成Swift:
self.performSelector(Selector:changeColourOfPage(), withObject: self, afterDelay: 1.0)
但是我收到了错误Missing argument for parameter 'waitUntilDone' in call
,当我把它放进去时,它说它想要参数modes
,但当我把它放进去时Extra argument modes
。
我无法弄清楚如何暂停应用程序及其所有线程几秒钟,然后继续正常运行?
有什么想法吗?
答案 0 :(得分:11)
在Swift中没有performSelector方法。您可以使用dispatch_after获取延迟功能。
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC * 1))
dispatch_after(delayTime, dispatch_get_main_queue()){
changeColourOfPage()
}
答案 1 :(得分:1)
Swift 3.1中的另一种方式
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
changeColourOfPage()
}
您可以将.milliseconds(1000)
或.microseconds(1_000_000)
或.nanoseconds(1_000_000_000)
等其他单位替换为时间间隔。
答案 2 :(得分:0)
很抱歉回答了一个老问题,但是出现了更好的方法 -
import Darwin //Put this line at the beginning of your file
func pauseForAMoment() {
sleep(1)
changeColorOfPage()
}