Я хочу создать универсальную утилиту api, которую я могу реализовать в любой модели. Поэтому в настоящее время я сталкиваюсь с проблемой вывода сообщений об ошибках из модели независимо от вида. Сообщения об ошибках необходимы для запуска уведомления «нет интернета» или «плохое интернет-соединение».
В целом, независимо от текущего представления, мне очень помогло бы создание сообщений об ошибках в разных классах, чтобы затем информировать пользователя о неудачном процессе.
Вот мой код на данный момент:
func execute(requestBody: [String: Any], withCompletion completion: @escaping (Data?, Int) -> Void) {
if !CheckApiReachability().getIsApiReachable() {
//trigger error message here
}
В общем, отслеживание достижимости не рекомендуется. Сеть может выйти из строя в любой момент. Тот факт, что он был доступен за долю секунды до того, как вы сделали сетевой запрос, не означает, что запрос не может завершиться ошибкой из-за сетевой проблемы. Вы должны попробовать запрос и обрабатывать ошибки по мере их возникновения. Вы можете использовать Notification для «широковещательной трансляции» событий по всему приложению, а поскольку вы пометили SwiftUI, вы можете использовать Combine для подписки на это уведомление.





Теперь я использовал Центр уведомлений для реализации события, которое запускает предупреждение в моем представлении содержимого.
Отправить / опубликовать уведомление:
let nc = NotificationCenter.default
self.nc.post(name: Notification.Name("InternetConnectionErrorAppeared"), object: nil)
Получать / подписываться / прослушивать отправленное событие и запускать что-нибудь:
.onReceive(nc.publisher(for: Notification.Name("InternetConnectionErrorAppeared"))) { output in
print("-- Api call failed triggered status code event")
}
Добро пожаловать в SO - пожалуйста, возьмите тур и прочтите Как спросить, чтобы улучшить, отредактировать и отформатировать свои вопросы. SO - это не сервис написания кода, это может быть реализовано несколькими способами. Предоставьте Минимальный воспроизводимый пример кода, который вы пытаетесь выполнить, и мы поможем вам решить проблемы.