Обработка ошибок на iOS

Swift предоставляет встроенную поддержку генерации и перехвата восстановимых ошибок во время выполнения. Например, если операция в вашем коде завершается сбоем или недопустима, API выдаёт ошибку HomeError . Это упрощает и оптимизирует обработку ошибок, позволяя сосредоточиться только на восстановимых ошибках. Затем вы можете предоставить варианты, например, позволить пользователю повторить попытку или вывести сообщение типа «Структура не найдена». Поскольку вам не нужно явно обрабатывать все возможные исключения, ваш код становится менее перегруженным и, следовательно, более сфокусированным на своей основной задаче.

Пример того, как можно справиться с восстановимым сбоем:

    let light1 = lightDevices.first
    if let light = light1 {
    do {
      try await structure.move(device: light, to: room)
    } catch let error as HomeError {
      // Code for handling the exception
    }

В следующей таблице приведены значения кодов HomeError , с которыми вы можете столкнуться:

Таблица: Коды HomeError
Код Значение
aborted Операция была прервана. Обычно это происходит при возникновении проблемы с параллельным выполнением, например, при сбое проверки последовательности или прерывании транзакции.
alreadyExists Ресурс или сущность, которую вы пытаетесь создать, уже существует. Например, это может быть именованное расписание для термостата.
cancelled Операция была отменена, как правило, звонившим.
dataLoss Невосстановимая потеря или повреждение данных.
deadlineExceeded Срок истек до завершения операции. Для операций, изменяющих состояние системы, эта ошибка может возвращаться даже при успешном завершении. Например, успешный ответ от сервера мог быть отложен достаточно долго, чтобы срок истек.
failedPrecondition Операция была отклонена, поскольку система не находится в состоянии, необходимом для её выполнения. Например, это сообщение может появиться, если вы вызвали команду stop для уже остановленной печи.
internal Внутренние ошибки. Это означает, что некоторые инварианты, ожидаемые базовой системой, были нарушены. Этот код ошибки зарезервирован для серьёзных ошибок.
invalidArgument Клиент указал недопустимый аргумент. Обратите внимание, что это отличается от `failedPrecondition`. `invalidArgument` указывает на аргументы, которые являются проблемными независимо от состояния системы (например, неверное имя файла).
notFound Вы указали сущность или ресурс, которые невозможно найти. Например, указали несуществующий идентификатор трека при вызове функции play на медиаплеере.
outOfRange Параметр вышел за пределы допустимого диапазона, установленного в текущем состоянии системы. Это сообщение появляется, когда значение находится в диапазоне значений, которые вызов API потенциально может принять, но не имеет смысла в текущем контексте.
permissionDenied У вас нет разрешения на выполнение указанной операции. Этот код ошибки не следует интерпретировать как подтверждение того, что запрос в остальном действителен.
resourceExhausted Какой-то ресурс исчерпан. Например, эта ошибка может возникнуть при вызове метода dispense(item:amount:unit:presetName:) на устройстве кормушки для животных, когда в нём больше не осталось еды.
unauthenticated Невозможно идентифицировать вызывающего абонента или запрос не имеет действительных учетных данных аутентификации.
unavailable Служба недоступна. Скорее всего, это временная ситуация, которую можно исправить, повторив попытку с отсрочкой. Обратите внимание, что повторные попытки неидемпотентных операций не всегда безопасны.
unimplemented Запрошенная операция не реализована, не поддерживается и не включена в данной службе.
unknown Неизвестная ошибка. Как правило, код unknown появляется, когда возникает ошибка, которую невозможно классифицировать ни одним из других кодов ошибок. Например, эта ошибка может быть возвращена, если значение статуса, полученное от внешнего API, не содержит достаточной информации о первопричине.