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ć:
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 unknown wystę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. |