#swift #loops #dispatch-async
#swift #циклы #отправка-асинхронная
Вопрос:
я хочу напечатать свои значения в цикле после задержки в 5 секунд, вот как я пытаюсь это сделать
let count = 1...10
for calls in count{
let seconds = 5
DispatchQueue.main.asyncAfter(deadline: .now() .seconds(seconds), execute: {
print(calls)
})
}
Но он ожидает 5 секунд только в первый раз и печатает все значения сразу.
Возможно, есть другой способ вызывать функцию много раз после задержки времени, пожалуйста, порекомендуйте
вот как я пытаюсь с таймером
var seconds = 10
var timer = Timer()
override func viewDidLoad() {
super.viewDidLoad()
let count = 1...10
for number in count{
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.counter), userInfo: nil, repeats: true)
print(number)
}
}
@objc func counter(){
seconds -= 1
if (seconds == 0){
print("User Location")
}
}
}
Комментарии:
1. почему бы вместо этого не использовать таймер?
2. @jawadAli та же проблема проверьте код, который я редактирую
3. Смотрите мой ответ. Вы на полпути (вы избавились от
Dispatch.queue
и используете таймер. Но вы действительно не хотите помещать таймер внутри вашего цикла — это наоборот. Вместо этого пусть таймер будет циклом.
Ответ №1:
Две части критических замечаний. Например, не используйте цикл — он выполняется немедленно. Во-вторых, используйте потоковую обработку, в этом нет необходимости. Используйте Timer
вместо:
class ViewController: UIViewController {
var timer = Timer()
var iterations = 0
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
}
@objc func printTime() {
print(Date())
iterations = 1
if iterations == 5 {
timer.invalidate()
}
}
}
Это вывод:
2020-08-15 18:08:38 0000
2020-08-15 18:08:43 0000
2020-08-15 18:08:48 0000
2020-08-15 18:08:53 0000
2020-08-15 18:08:58 0000
После 5 итераций вы аннулируете время его отключения.
Комментарии:
1. как насчет sleep() ? вы бы порекомендовали это?
2. Я не уверен, без дополнительной информации. На самом деле я не вижу причин для