Обработка ошибок предоставляет структурированный механизм реагирования и восстановления после ошибок в программах. В этой статье мы представим наш подход к обработке ошибок. Swift обеспечивает обработку ошибок, такую ​​как создание, перехват и распространение ошибок, как часть базовой структуры. Поэтому все быстрые программы могут воспользоваться предоставленным механизмом. Хотя Swift предоставляет опции, которые обрабатывают отсутствие значений, обработка ошибок дает больше пояснений, а также изменяет ход программы.

В примере ниже мы представляем интернет-магазин. Пользователи могут загружать кредиты и делать покупки из доступного инвентаря.

Мы определяем условия ошибки в перечислении EStoreError. Перечисления полезны при структурировании связанных ошибок. Чтобы быть представленным как ошибки, EStoreError должен соответствовать протоколу ошибок. Протокол ошибок предоставляет свойство localizedDescription для описания ошибок. Таким образом, мы используем случай переключения для описания случаев ошибки.

Выдача ошибки указывает на то, что произошло что-то неожиданное. Мы выбрасываем ошибки с помощью ключевого слова throw. Например, следующий код выдает ошибку, когда предмет отсутствует в инвентаре.

throw EStoreError.invalidItem

Когда мы помечаем функцию/метод или инициализатор ключевым словом throwskeyword в сигнатуре функции, это означает, что это вызывающая функция. Следовательно, мы должны обрабатывать ошибки, которые выдает функция.

Метод магазина распространяет любые ошибки, которые он выдает, и любой код, вызывающий метод магазина, должен либо обрабатывать ошибки. Ошибки выдаются операторами защиты, которые проверяют определенные условия и выдают соответствующие ошибки. Мы обрабатываем ошибки с помощью операторов docatc и try, try?и try! или позволяем им распространяться.

В функции shopFavorite, если

func order(_ itemName: String) throws

выдает ошибку перечисления EStore,

func shopFavoriteFrom(_ store: EStore) throws

обрабатывает ошибку, печатая ее локализованное описание. В противном случае все остальные общие ошибки распространяются fromshopFavoriteFrom to

callsShopFavorite(_ store: EStore) 

и мы обрабатываем ошибки здесь.

Для более лаконичного подхода к обработке try?позволяет нам преобразовать ошибки в необязательные, возвращая nil. Таким образом, нет необходимости иметь do-catch. В приведенном выше примере показан ошибочный и правильный ответ на заказ с использованием try? вместо nil..

Если мы хотим отключить распространение ошибок, мы используем try!. Будьте осторожны с этим подходом, потому что когда возникает ошибка, try! приведет к сбою программы. Приведенное выше ошибочное try!statement приводит к сбою нашей программы.

В этой статье мы представили пример приложения, показывающий распространение ошибок и различные механизмы обработки. Это все, что касается обработки ошибок в Swift. Удачного программирования!