我的應用程序詢問用戶問題並得到答案,每個問題有一些恆定的時間(例如30秒)來回答。我想要顯示用戶警告像「最後(n)秒......」,如果用戶不會在那個時候回答 - 應用程序應該跳過問題。 寫了一些代碼,使用DispatchQueue:在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."
}
它的工作原理,但這些代碼執行,即使用戶的時間回答問題。 那麼如果我可以「重置」或「清除」DispatchQueue.main,以防止在用戶及時回答時執行此代碼?
只要把你的條件,即。 'if!userHasAnswered {...}',在塊內部。 – Connor
如果gcd使用計時器,並且用戶回答問題時使計時器無效。 –
它看起來像不可能使用(userHasAnswered)變量,因爲它會因不同的問題而不同(某些問題及時回答,有些會被跳過)。如何使用計時器? – zzheads