Obsługa błędów na iOS

Swift zapewnia wbudowane wsparcie umożliwiające zgłaszanie i łapanie odwracalnych błędów w czasie wykonywania. Jeśli na przykład operacja w kodzie nie powiedzie się lub jest nieprawidłowa, interfejs API zwróci błąd HomeError. Upraszcza i uproszcza obsługę błędów, ponieważ pozwala skupić się tylko na błędach, które można naprawić. Następnie możesz podać użytkownikowi opcje, np. pozwolić mu spróbować ponownie lub wyświetlić komunikat „Nie znaleziono struktury”. Ponieważ nie musisz obsługiwać wyraźnie wszystkich możliwych wyjątków, kod jest mniej zatłoczony i w konsekwencji pozostaje bardziej skoncentrowany na swoim głównym celu.

Przykład sposobu obsługiwania odwracalnych błędów:

    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 oznaczenia HomeError, które mogą się pojawić:

Tabela: HomeError kody
Kod Znaczenie
aborted Operacja została przerwana. Ten błąd występuje zazwyczaj w przypadku problemu równoczesności, takiego jak nieudana kontrola sekwencji lub przerwanie transakcji.
alreadyExists Zasób lub encja, które próbujesz utworzyć, już istnieją. Może to być np. nazwany harmonogram dla termostatu.
cancelled Operacja została anulowana, zwykle przez element wywołujący.
dataLoss Nieodwracalna utrata danych lub ich uszkodzenie.
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 wyświetlić, jeśli wywołasz metodę stop w przypadku piekarnika, 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. Zwróć uwagę, że ta funkcja różni się od funkcji failedPrecondition. Funkcja invalidArgument wskazuje argumenty, które są problematyczne niezależnie od stanu systemu (np. nieprawidłowo sformułowana nazwa pliku).
notFound Wskazano element lub zasób, którego nie udało się znaleźć. Na przykład podanie nieistniejącego identyfikatora utworu podczas wywoływania funkcji play na urządzeniu z odtwarzaczem multimediów.
outOfRange parametr przekroczył prawidłowy zakres na podstawie bieżącego stanu systemu; To ostrzeżenie 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 w inny sposób prawidłowe.
resourceExhausted Niektóre zasoby zostały wyczerpane. Może się to zdarzyć na przykład, gdy ktoś wywoła funkcję dispense(item:amount:unit:presetName:) na karmniku dla zwierząt i nie ma już w nim jedzenia.
unauthenticated Nie można zidentyfikować dzwoniącego lub żądanie nie zawiera 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 większym odstępem. Pamiętaj, że ponowne próby wykonywania operacji nie idempotentnych nie zawsze są bezpieczne.
unimplemented Żądana operacja nie jest wdrożona, obsługiwana ani włączona w tej usłudze.
unknown Nieznany błąd. Ogólnie rzecz ujmując, błąd unknownwystępuje, gdy wystąpi warunek błędu, którego nie można zaklasyfikować za pomocą żadnego z innych 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 przyczynie błędu.