Удобный способ отображения ошибок в 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.