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ć:
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. |