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 它。
我目前正在学习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 它。