Obsługa błędów na iOS

Swift zapewnia wbudowaną obsługę zgłaszania i przechwytywania błędów możliwych do naprawienia w czasie działania. Jeśli na przykład operacja w kodzie nie powiedzie się lub jest nieprawidłowa, interfejs API zgłasza błąd HomeError. Upraszcza to i usprawnia obsługę błędów, ponieważ pozwala skupić się tylko na błędach, które można naprawić. Możesz wtedy udostępnić opcje, takie jak umożliwienie użytkownikowi ponownej próby lub wyświetlenie komunikatu „Nie znaleziono struktury”. A ponieważ nie musisz jawnie obsługiwać każdego możliwego wyjątku, kod jest mniej zagracony i dzięki temu bardziej skupiony na swoim głównym celu.

Przykład sposobu postępowania w przypadku 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: kody HomeError
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óre próbujesz utworzyć, już istnieją. Może to być na przykład nazwany harmonogram termostatu.
cancelled Operacja została anulowana, zwykle przez element wywołujący.
dataLoss Utrata lub uszkodzenie danych, których nie można odzyskać.
deadlineExceeded Termin upłynął, zanim operacja została ukończona. 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 odpowiedź z serwera mogła zostać opóźniona na tyle, że upłynął termin.
failedPrecondition Operacja została odrzucona, ponieważ system nie znajduje się w stanie wymaganym do jej wykonania. Możesz na przykład zobaczyć ten komunikat, jeśli wywołasz metodę stop na piekarniku, który został już wyłączony.
internal Błędy wewnętrzne. Oznacza to, że niektóre niezmienniki oczekiwane przez system bazowy zostały naruszone. Ten kod błędu jest zarezerwowany dla poważnych błędów.
invalidArgument Klient podał nieprawidłowy argument. Zwróć uwagę, ż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órych nie można znaleźć. Na przykład podanie nieistniejącego identyfikatora ścieżki podczas wywoływania metody play na urządzeniu odtwarzacza multimedialnego.
outOfRange Parametr przekroczył prawidłowy zakres na podstawie bieżącego stanu systemu. 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 oznacza, że żądanie jest prawidłowe.
resourceExhausted Niektóre zasoby zostały wyczerpane. Może on zostać wywołany na przykład wtedy, gdy użytkownik wywoła dispense(item:amount:unit:presetName:) na urządzeniu do karmienia zwierząt, a w urządzeniu nie ma już karmy.

Może to być też spowodowane przekroczeniem limitu projektu interfejsów Home API. Więcej informacji znajdziesz w artykule o zarządzaniu 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 najprawdopodobniej stan przejściowy, który można skorygować, ponawiając próbę z wycofaniem. Pamiętaj, że ponawianie operacji nieidempotentnych nie zawsze jest bezpieczne.
unimplemented Żądana operacja nie jest zaimplementowana, obsługiwana ani włączona w tej usłudze.
unknown Nieznany błąd. Ogólnie rzecz biorąc, błąd 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 zostać zwrócony na przykład wtedy, gdy wartość stanu otrzymana z zewnętrznego interfejsu API nie zawiera wystarczających informacji o głównej przyczynie.