Как я могу сделать недействительным этот DispatchWorkItem в Swift?

Я делаю таймер, который обновляет текст, когда телефон записывает, и выполняю тяжелую работу с фильтрами. По какой-то причине рабочий элемент не выглядит недействительным, потому что когда я возвращаюсь к своему представлению, у меня появляется дополнительный таймер, обновляющий текст. Они продолжают складываться каждый раз, когда я возвращаюсь и перезапускаю его.

        recordedTimeQueue = DispatchWorkItem {
            for i in 1 ..< (600) { // 600 max seconds
                usleep(1000000)
                DispatchQueue.main.async {
                    recordedTime?.text = "\(i)"
                }
            }
        }

        DispatchQueue.global().async(execute: recordedTimeQueue!)

Когда я прекращаю свою запись, не следует ли выбросить этот DispatchWorkItem? Я даже пытался сделать это ноль потом.

        print("recording stopped")

        recordedTimeQueue?.cancel()

Я могу предположить, что мне нужно создать глобальную переменную bool, чтобы я мог при желании вернуться из цикла for, но я не знаю, зачем это нужно.

редактировать: я думаю, что получил, хотя я не знаю, технически ли это правильно:

        recordedTimeQueue = DispatchWorkItem {
            for i in 1 ..< (600) { // 600 max seconds
                if(recordedTimeQueue?.isCancelled)! { break }
                usleep(1000000)
                DispatchQueue.main.async {
                    recordedTime?.text = "\(i)"
                }
            }
        }

0 ответов

Другие вопросы по тегам