停止/暂停swift应用程序一段时间



我的应用程序使用多个线程的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()
}

最新更新