Swift if 为真后延迟

Swift delay after if is true

我目前正在学习Swift,无法继续。我创建了一个骰子游戏。如果 "if query" 为真,程序应该在可以进行新查询之前短暂暂停。

@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 命令。我想要反过来。

对不起我糟糕的英语 ;)

您可以使用 async(deadline:execute:) 禁用您的按钮并在两秒后 re-enable 它。因此,代替 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
}
   sleep (2)

这是创建您正在寻找的延迟的错误方法。 sleep() 完全停止你的进程,至少在那个线程上。你应该做的是禁用按钮,然后使用 Timer(或其他形式的延迟执行,但定时器很容易)在两秒后 re-enable 它。