В тестовом приложении IChat есть функция showAlert
extension UIViewController {
func showAlert(with title: String, and message: String, completion: @escaping () -> Void = { }) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default) { (_) in
completion()
}
alertController.addAction(okAction)
present(alertController, animated: true, completion: nil)
}
}
Вызов этой функции происходит по наступлению ошибки. Ошибка возникает не всегда мгновенно, иногда в результате сетевого взаимодействия. Соответственно, когда вызов происходит по прошествии времени - возникает ошибка изменения интерфейса.
Для избежания этого, вызов showAlert надо передавать в DispatchQueue.main.async.
Почему это не сделать сразу в функции showAlert и не возвращаться больше к этому в рабочем коде?
Какие подводные камни лежат в помещении тела функции сразу в main queue?
Какова хорошая практика?