Если ошибка в swift коде

Устранение ошибок с помощью пользовательской обработки

Примерчик немного кривоват, но суть от этого не меняется

У нас есть работник станции техобслуживания, который приписан к станции (job), нанят на работу (isOnDuty), имеет или не имеет опыт работы с трансмиссией (boxSpec) и автомобиль с коробкой или без нее пока неизвестного типа. Соответсвенно, чтобы выполнить работу по починке механической коробки передач и выдать бренд масла, которое было использовано при ремонте нужно сделать следующее:

Зачем все это нужно?

Обработка ошибок во время выполнения программы и самое главное — реакция приложения на эти ошибки — это хорошая практика для любого программного продукта. Согласитесь, если вы пользуетесь приложением и в какой-то момент оно без каких либо видимых проявлений «падает»,  — что вы подумаете  про разработчика? Думается — ничего хорошего. А ведь можно в коде добавить обработчики ошибок, и в читабельном формате сообщать пользователю что именно пошло не так. С одной стороны — это значительно повышает юзабилити приложения, с другой облегчает отладку при разработке.

Однако, ошибки не всегда нужно обрабатывать. Языковые функции  Swift позволяют избежать некоторых ошибок в целом. Как правило, если вы можете избежать возникновения ошибки, возьмите именно этот путь проектирования и разработки мобильного приложения iOS. Но если вы не можете избежать потенциального условия появления ошибки, то явная обработка — лучший вариант.

В этой статье я составлю памятку по работе с ошибками на языке программирования  Swift 3

Избегаем ошибок nil

Так как Swift обладает элегантными опциональными возможностями обработки, вы можете полностью избежать  ошибки при попытке извлечь значение из опционала, когда значение в этом самом опционале не представлено.

Читайте также:  Ошибка с драйвером Stalker zov pripyati

Быстрый пример — получение элемента из словаря по ключу возвращает опциональное значение. Т.е. если в словаре есть запрошенный ключ — то вернется значение, а если нет — то вернется nil.

Как умный программист, вы можете манипулировать этой функцией, чтобы преднамеренно перевести nil в состояние ошибки. Такой подход выгоден в случае если нужно не вызвать падение программы и при этом ничего не делать если ошибка возникла.

ва типичных примера исключения ошибок Swift с использованием nil — это проваливающиеся инициализаторы и инструкция guard.

Проваливающиеся инициализаторы

Проваливающиеся инициализаторы предотвращают создание объекта, если для их создания не предоставлена ​​достаточная информация. До появления этих инициализаторов в Swift, да и в других языках программирования этот функционал обычно достигался с помощью шаблона Factory Method. Old-school пример создания станции технического обслуживания (СТО)  выглядит как метод класса:

Две последних строки нам показывают следующее — станция Audi была создана, т.к. в наших брендах масел мы смоги найти Castrol, а вот  kiaStation будет равна nil, т.к. попытка найти масло Zic обернулось неудачей.

То же метод создания мы можем написать при помощи проваливающегося инициализатора.  Давайте ЗАМЕНИМ метод create(motorOilBrand:) на код инициализатора:

Также следует изменить строки создания станций.

//
// proSwift.ru
//
// Swift 3

//let audiStation = Stantion.create(with: “Castrol”)
//let kiaStation = Stantion.create(with: “Zic”)

let audiStation = Stantion(brand: “Castrol”)
let kiaStation = Stantion(brand: “Zic”)

То же самое: Ауди — есть объект, Киа — nil.

Инструкция guard

Без долгих рассуждений — сразу к примеру: изменим наш инициализатор при помощи инструкции guard

При этом изменении нет необходимости в переносе else на отдельную строку, и случай сбоя становится более очевидным, так как он теперь находится наверху инициализатора. Более того, код стал более читабелниый и понятный с точки зрения направления чтения (сверху вниз): то что задумывалось разработчиком и должно произойти, если не возникнут ошибки, — описано по ходу текста программы.

Читайте также:  Коды ошибки в СЗВ-ТД

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *