Удобный способ отображения ошибок в iOS-приложениях
Эта статья является продолжением моей предыдущей статьи Держите вещи СУХИМИ. Тогда я использовал ErrorPresenting
протокол с базовой presentError(title: String, message: String)
функцией в качестве примера расширения протокола в Swift. Сегодня я хотел бы расширить эту идею и показать вам более сложную функцию представления ошибок.
Если у вас мало знаний об обработке ошибок в Swift, рекомендую заглянуть в документацию. Вот краткий обзор:
Обработка ошибок - это процесс реагирования и восстановления после ошибок в вашей программе. Swift обеспечивает первоклассную поддержку для генерации, перехвата, распространения и управления исправляемыми ошибками во время выполнения.
В Swift ошибки представлены значениями типов, которые соответствуют протоколу
Error
. Этот пустой протокол указывает, что тип может использоваться для обработки ошибок.
Быстрые перечисления особенно хорошо подходят для моделирования группы связанных состояний ошибки со связанными значениями, позволяющими передавать дополнительную информацию о природе ошибки.
Для начала нам понадобится enum
со списком ошибок, которые мы хотим использовать. Начнем с ошибок, возникающих при общении с сервером. Мы можем назвать эти ApiError
:
Я рекомендую иметь отдельные enums
для разных типов ошибок, например ,BluetoothError
, NotificationError
. Таким образом вы сразу узнаете, с какой ошибкой имеете дело.
Чтобы сделать наши ошибки подробными для пользователя, нам нужны заголовок и описание. Error
- это пустой протокол, и он не обеспечивает ни того, ни другого. К счастью, мы можем создать наш собственный протокол, соответствующий Error
! Назовем это AppError
:
Убедитесь, что ApiError
соответствует AppError
, указав заголовок и описание для всех ошибок:
Теперь, когда ваши ошибки проявляются, мы можем создать функцию apresentError
:
Обратите внимание, что в качестве аргумента используется Error
. Это означает, что мы можем передать любой Error
, но только ошибки, соответствующие AppError
, будут отображаться как предупреждение. Остальные из них будут удобно распечатаны в консоли для облегчения отладки.
Чтобы избежать дублирования этой функции в каждом UIViewController
, где требуется отображение ошибки, вы можете либо добавить ее как UIViewController
расширение, либо, как я, реализовать ErrorPresenting
procotol с расширением:
Это всего лишь базовая идея того, как представлять ошибки в Swift. Если вы хотите пойти дальше, вы можете локализовать описание ошибки или реализовать ошибки синтаксического анализа из кодов ошибок HTTP. Все это прекрасно впишется в вашу ошибку enums
. Повеселись!
Не забудьте нажать и удерживать 👏 и подписаться на блог DaftMobile! Вы также можете найти нас в Facebook и Twitter.