Поскольку ваш код является синхронным, код в строке выполняется сразу после кода в предыдущей строке. Таким образом, вы всегда будете видеть только последний установленный текст "Some text4"
Для вызова некоторого кода после того, как что-то сделано, мы используем обработчики завершения в Swift
func call(_ completion: @escaping (String)->Void) {
completion("SomeText")
}
завершение вызова изнутри метода в тот момент, когда вам нужно, скажем, задание выполнено. Затем выполняется код внутри параметра завершения
call { text in // calling method
self.myLabel.text = text // this is called after you call completion(:) from inside `call(:)`
}
Итак, давайте попробуем это с этой демонстрацией
@IBAction func myButton(_ sender: UIButton) {
callAfter(2, text: "Text1") { text in
print(text)
}
callAfter(4, text: "Text2") { text in
print(text)
}
callAfter(6, text: "Text3") { text in
print(text)
}
}
func callAfter(_ duration: Double, text: String, _ completion: @escaping (String)->Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
completion(text)
}
}
... вы должны увидеть напечатанные Text1
, Text2
, Text3
в периоды 2, 4, 6 секунд с момента нажатия кнопки