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