Obsługa błędów na iOS

Swift ma wbudowaną obsługę zgłaszania i przechwytywania błędów, które można naprawić w czasie działania. Jeśli na przykład operacja w kodzie nie powiedzie się lub jest nieprawidłowa, interfejs API zgłosi błąd HomeError. Upraszcza to i usprawnia obsługę błędów, ponieważ możesz skupić się tylko na błędach, które można naprawić. Możesz wtedy udostępnić opcje, np. pozwolić użytkownikowi spróbować ponownie lub wyświetlić komunikat „Nie znaleziono struktury”. A ponieważ nie musisz wyraźnie obsługiwać każdego możliwego wyjątku, Twój kod jest mniej zagmatwany i dzięki temu bardziej skupiony na swoim głównym celu.

Przykład obsługi błędu, który można naprawić:

    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
    }

W tabeli poniżej znajdziesz znaczenie kodów HomeError, które mogą się pojawić:

Tabela: HomeError kody
Kod Znaczenie
aborted Operacja została przerwana. Zwykle pojawia się, gdy występuje problem z równoczesnością, np. nieudana kontrola sekwencji lub przerwanie transakcji.
alreadyExists Zasób lub encja, którą próbujesz utworzyć, już istnieje. Może to być na przykład nazwany harmonogram termostatu.
cancelled Operacja została anulowana, zwykle przez element wywołujący.
dataLoss Nieodwracalna utrata lub uszkodzenie danych.
deadlineExceeded Termin upłynął przed wykonaniem operacji. W przypadku operacji które zmieniają stan systemu, ten błąd może zostać zwrócony nawet wówczas, gdy operacja zakończyła się pomyślnie. Na przykład pomyślna odpowiedź z serwera mogła zostać opóźniona na tyle, że termin upłynął.
failedPrecondition Operacja została odrzucona, ponieważ system nie znajduje się w stanie wymaganym do jej wykonania. Ten komunikat może się na przykład pojawić, jeśli wywołasz stop na piekarniku, który jest już wyłączony.
internal Błędy wewnętrzne. Oznacza to, że pewne niezmienniki oczekiwane przez system bazowy zostały uszkodzone. Ten kod błędu jest zarezerwowany dla poważnych błędów.
invalidArgument Klient podał nieprawidłowy argument. Pamiętaj, że różni się to od `failedPrecondition`. `invalidArgument` wskazuje argumenty które są problematyczne niezależnie od stanu systemu (np. nieprawidłowa nazwa pliku).
notFound Podano encję lub zasób, którego nie można znaleźć. Na przykład podanie nieistniejącego identyfikatora utworu podczas wywoływania play na urządzeniu odtwarzacza multimediów.
outOfRange Parametr przekroczył prawidłowy zakres na podstawie bieżącego stanu systemu stanu. Ten komunikat pojawia się, gdy wartość mieści się w zakresie wartości które wywołanie interfejsu API może potencjalnie zaakceptować, ale nie ma sensu w obecnym kontekście.
permissionDenied Nie masz uprawnień do wykonania określonej operacji. Ten kod błędu nie powinien być interpretowany jako oznaczający, że żądanie jest w inny sposób prawidłowe.
resourceExhausted Wykorzystano jakiś zasób. Może to być na przykład zgłoszone gdy wywołasz dispense(item:amount:unit:presetName:) na urządzeniu do karmienia zwierząt, a w urządzeniu nie ma już jedzenia.

Może to być też spowodowane przekroczeniem limitu projektu interfejsów Home API. Więcej informacji znajdziesz w artykule Zarządzanie limitami.
unauthenticated Nie można zidentyfikować elementu wywołującego lub żądanie nie ma prawidłowych danych uwierzytelniających.
unavailable Usługa jest niedostępna. Jest to najczęściej stan przejściowy, który można rozwiązać, ponawiając próbę z czasem do ponowienia. Pamiętaj, że ponawianie operacji nieidempotentnych nie zawsze jest bezpieczne.
unimplemented Wybrana operacja nie jest wdrożona, obsługiwana ani włączona w tej usłudze.
unknown Nieznany błąd. Ogólnie rzecz biorąc, unknown pojawia się gdy wystąpi błąd, którego nie można sklasyfikować za pomocą żadnego z pozostałych kodów błędów. Ten błąd może na przykład zostać zwrócony, gdy wartość stanu otrzymana z zewnętrznego interfejsu API nie zawiera wystarczających informacji o przyczynie głównej.