У меня есть функция, которая работает в течение длительного времени, и я хотел бы дать ей ограничение 10 секунд, если это возможно.Я также хотел бы реализовать кнопку Cancel
, чтобы пользователь также мог ее нажимать.
Я попытался просто проверить состояние переменной abort
во время ее вычисления, но она просто продолжает работать.Я не очень разбираюсь в Grand Central Dispatch
и timers
и не знаю, куда идти.
...
var abort = false
@objc func abortCalculations() {
abort = true
}
func calculate() {
abort = false
let _ = Timer(timeInterval: 10, target: self, selector: #selector(abortCalculations), userInfo: nil, repeats: false)
dispatchGroup.enter()
DispatchQueue.global(qos: .userInteractive).async {
while !abort {
x += 1 // for example, just something that repeats
// when this actually finishes, it leaves the dispatch group
}
}
}
...
Я бы хотел, чтобы функция calculate()
завершилась, когда таймеростанавливает его (или когда пользователь нажимает кнопку в будущем).Вместо этого он продолжает работать, и функция abortCalculations()
никогда не вызывается.