showAlert и DispatchQueue.main.async


#1

В тестовом приложении 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?
Какова хорошая практика?