Meine Anwendung fragt Benutzer Frage und Antwort erhalten, jede Frage hat einige konstante Zeit (zum Beispiel 30 Sekunden) für die Beantwortung. Ich möchte zeigen Benutzer Warnung wie "Last (n) Sekunden ..." und wenn Benutzer nicht in dieser Zeit beantworten - App sollte Frage überspringt. Schrieb einen Code, mit DispatchQueue:Wie Einfügen Alarm nach einiger Zeit in Swift 3.0
let timePerQuestion = 20
let timeStartAlert = 10
for i in (0..<timeStartAlert) {
DispatchQueue.main.asyncAfter(deadline: (.now() + .seconds(timePerQuestion-timeStartAlert+i))) {
self.failureLabel.text = "Left \(Int(timeStartAlert-i)) seconds..."
self.failureLabel.isHidden = false
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(timePerQuestion)) {
self.failureLabel.text = "Reseting question"
self.failureLabel.isHidden = false
self.quiz.skipQuestion()
self.playNewRound()
self.failureLabel.text = "Sorry, that's not it."
}
Es funktioniert, aber der Code ausführt, selbst wenn Benutzer Frage rechtzeitig beantwortet. Also, wie kann ich "DispatchQueue.main" "zurücksetzen" oder "löschen", um die Ausführung dieses Codes zu verhindern, wenn der Benutzer rechtzeitig antwortet?
einfach Ihre bedingten setzen, das heißt. 'if! userHasAnsered {...}', innerhalb des Blocks. – Connor
Verwenden Sie stattdessen einen Timer, wenn gcd, und wenn Benutzer die Frage beantwortet, den Timer ungültig machen. –
Es sieht aus wie unmögliche Verwendung (userHasAnswered) Variable, weil es für verschiedene Fragen anders sein wird (einige Fragen rechtzeitig beantwortet, einige übersprungen). Wie benutzt man den Timer? – zzheads