Как заставить код ждать завершения работы Timer ? (Swift)
Проблема в том, что после запуска функции focusTime() следущая строчка кода работает паралельно с созданым таймером. В идеале нужно дождаться завершения работы таймера и потом уже продолжить.
...
if sessions < 10 {
focusTime()
sessions += 1
} else {
print ("Good job!")
}}
func focusTime () {
createTimer()
let focusCounter = 5
timeLeft = focusCounter
print("focus time started")
runTimer()
}
func createTimer() {
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)
}}
@objc func runTimer() {
if timeLeft > 0 { timeLeft -= 1 }
else {
timer?.invalidate()
timer = nil
}}
...
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Я бы переписал ваш код следующим образом, чтобы второй раз таймер запускался изнутри runTimer()
class ViewController: UIViewController {
var timer: Timer?
var timeLeft = 3
override func viewDidLoad() {
super.viewDidLoad()
startFocusTime1()
}
func startFocusTime1() {
createTimer()
}
func startFocusTime2() {
let focusCounter = 5
timeLeft = focusCounter
print("focus time started")
runTimer() // возможно имеется в виду снова createTimer()?
}
func createTimer() {
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)
}
}
@objc func runTimer() {
if timeLeft > 0 {
timeLeft -= 1
return
}
timer?.invalidate()
timer = nil
startFocusTime2()
}
}