Obsługa błędów na iOS

Swift ma wbudowaną obsługę zgłaszania i wyłapywania błędów, które można naprawić w czasie działania programu. Jeśli na przykład operacja w kodzie zakończy się niepowodzeniem lub jest nieprawidłowa, interfejs API zgłosi HomeError błąd. Upraszcza i usprawnia obsługę błędów, ponieważ pozwala skupić się tylko na błędach, które można naprawić. Możesz wtedy podać opcje, np. pozwolić użytkownikowi spróbować ponownie lub wyświetlić komunikat „Nie znaleziono struktury”. A ponieważ nie musisz jawnie obsługiwać każdego możliwego wyjątku, Twój kod jest mniej zagracony 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 możesz napotkać:

Tabela: HomeError kody
Kod Znaczenie
aborted Operacja została przerwana. Zwykle pojawia się, gdy wystąpi problem z równoczesnością, np. nieudana kontrola sekwencji lub przerwana transakcja.
alreadyExists Zasób lub encja, które próbujesz utworzyć, już istnieją. Może to być np. 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ź serwera mogła być tak opóźniona, ż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 zadzwonisz na numer stop, gdy piekarnik 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ę on od kodu `failedPrecondition`. Kod `invalidArgument` wskazuje argumenty, które są problematyczne niezależnie od stanu systemu (np. nieprawidłowa nazwa pliku).
notFound Podano element lub zasób, którego nie można znaleźć. Na przykład określenie nieistniejącego identyfikatora ścieżki podczas wywoływania play na urządzeniu odtwarzającym multimedia.
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. Tego kodu błędu nie należy interpretować jako wskazującego, że żądanie jest w inny sposób prawidłowe.
resourceExhausted Jeden z zasobów został wyczerpany. Może to na przykład wystąpić, gdy ktoś zadzwoni dispense(item:amount:unit:presetName:) na urządzenie do karmienia zwierząt, a w urządzeniu nie ma już jedzenia.
unauthenticated Nie można zidentyfikować 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 wycofywaniem. 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, kod unknown pojawia się, gdy wystąpi błąd, którego nie można zaklasyfikować 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.