我在Swift代码中遇到sleep
函数的问题。我正在使用import Darwin
和usleep(400000)
。到达睡眠前的一些动作被阻止,我不知道为什么。这是我的代码中的一个简短示例:
@IBAction func Antwort4Button(_ sender: Any) {
if (richtigeAntwort == "4"){
Antwort4.backgroundColor = UIColor.green
Ende.text = "Richtig!"
NaechsteFrage()
}
else {
Ende.text = "Falsch!"
//NaechsteFrage()
}
}
func NaechsteFrage() {
usleep(400000)
Antwort1.backgroundColor = UIColor.red
Antwort2.backgroundColor = UIColor.red
Antwort3.backgroundColor = UIColor.red
Antwort4.backgroundColor = UIColor.red
Ende.text = ""
FragenSammlung()
}
此行不会执行:
Antwort4.backgroundColor = UIColor.green
Ende.text = "Richtig!"
为什么叫睡眠阻止这些动作?如果我删除了import Darwin
和sleep
,我的代码就可以了。有人有想法吗?抱歉我的英语不好:P
答案 0 :(得分:3)
这里有代码:
func delay(delayTime: Double, completionHandler handler:@escaping () -> ()) {
let newDelay = DispatchTime.now() + delayTime
DispatchQueue.main.asyncAfter(deadline: newDelay, execute: handler)
}
已编辑:您可以创建一个viewController扩展,以便在任何viewControllers中使用,如下所示:
extension UIViewController {
func delay(delayTime: Double, completionHandler handler:@escaping () -> ()) {
let newDelay = DispatchTime.now() + delayTime
DispatchQueue.main.asyncAfter(deadline: newDelay, execute: handler)
}
}
所以在你的viewController中你只需这样调用:
delay(delayTime: 2, completionHandler: {
_ in
// do your code here
})
答案 1 :(得分:2)
其他人alrady回答了这个问题,我只是想提供一些额外的信息(暂不公开)。
你说Antwort4.backgroundColor = UIColor.green
没有被执行。为了澄清,这是执行的,但是你没有看到结果,因为你调用阻止UI的sleep
。以下是发生的事情:
Antwort4
的背景颜色设置为绿色Antwort4
的背景颜色再次设置为红色要解决手头的问题,您可以使用Apples API。因此,您可以使用:
而不是睡眠DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.Antwort1.backgroundColor = UIColor.red
self.Antwort2.backgroundColor = UIColor.red
self.Antwort3.backgroundColor = UIColor.red
self.Antwort4.backgroundColor = UIColor.red
self.Ende.text = ""
self.FragenSammlung()
}
答案 2 :(得分:1)