У меня есть следующая функция setPath()
, которая вызывается всякий раз, когда пользователь нажимает на кнопку:
var loadSuccessfulTimer: Timer? = nil
func setPath(index: Int) {
self.loadSuccessfulTimer?.invalidate()
self.loadSuccessfulTimer = nil
print("setting path")
self.pause(releaseAudioSession: false)
self.reset(index: index)
let song = DataManager.getInstance().getQueueSong(index: index)
superpowered.setPath(song.url, true)
self.loadSuccessfulTimer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(checkLoadSucess), userInfo: nil, repeats: true)
self.loadSuccessfulTimer!.fire()
}
@objc func checkLoadSucess() {
let status = self.superpowered.getLoadSuccessful()
print(status)
if(status != -1) {
self.loadSuccessfulTimer?.invalidate()
self.loadSuccessfulTimer = nil
if(status == 1){
print("success")
} else if(status == 2){
print("failed")
}
}
}
Таким образом, всякий раз, когда вызывается функция setPath()
, я хочу, чтобы таймер срабатывал каждые 0.2
секунд для проверки значения status = self.superpowered.getLoadSuccessful()
. Переменная status будет иметь значения -1, 1, 2
Я хочу остановить таймер, когда он либо 1
, либо 2
. Однако происходит следующий сценарий:
При первом нажатии он работает как положено и печатает следующее:
setting path
-1
-1
-1
-1
-1
-1
1
success
При втором касании таймер срабатывает только один раз (я полагаю, это из .fire()
) и печатается следующее:
setting path
-1
Я пытался посмотреть, что может пойти не так, но все, что я мог видеть, это рекомендуемый способ использования Timer
.
Update
Второй раз setPath()
вызывается с DispatchQueue.global()
, возможно, это связано с проблемой.