내 응용 프로그램에서 사용자 질문을하고 대답을 얻습니다. 각 질문에 응답을위한 일정 시간 (예 : 30 초)이 있습니다. 'Last (n) seconds ...'와 같은 사용자 알림을 표시하고 사용자가 그 시간에 응답하지 않으면 앱에서 질문을 건너 뜁니다. 는 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