我目前正在学习Swift,无法继续学习。我创建了一个骰子游戏。如果“if query”为true,则程序应在可能的新查询之前暂停。
@IBAction func guess(_ sender: Any) {
let diceRoll = arc4random_uniform(5)
let fingerErgebnis = diceRoll + 1
let fingerAntwort = String(fingerErgebnis)
if fingerTextfield.text == fingerAntwort{
ergebnis.text = "Richtig erraten!"
ergebnis.textColor = UIColor.green
ergebnis.font = ergebnis.font.withSize(20)
bild.image = UIImage(named: ("win.jpg"))
button.setTitle("Neues Spiel!", for: .normal)
fingerTextfield.text = " "
sleep (2)
}else if fingerErgebnis == 1 {
ergebnis.text = "Leider falsch! Die Zahl war \(fingerAntwort)."
ergebnis.textColor = UIColor.red
bild.image = UIImage(named: ("finger1.jpg"))
button.setTitle("Versuch es nochmal!", for: .normal)
} ...
就一切正常而言,但我希望一切都先运行,我必须等待2秒,直到我再次点击该按钮。首先暂停我的测试,然后执行其余的if命令。我想要反过来。
对不起我可怕的英语;)
答案 0 :(得分:0)
您可以使用async(deadline:execute:)
禁用按钮并在两秒后重新启用它。因此,而不是sleep(2)
放置以下内容:
button.isUserInteractionEnabled = false
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
// assuming button is a property of the current view controller
self?.button.isUserInteractionEnabled = true
}
答案 1 :(得分:0)
sleep (2)
这是创建您正在寻找的延迟的错误方法。 sleep()
完全停止你的进程,至少在那个线程上。你应该做的是禁用按钮,然后使用Timer
(或其他形式的延迟执行,但Timer很容易)在两秒钟后重新启用它。