Swift ma wbudowaną obsługę zgłaszania i przechwytywania błędów, które można naprawić w czasie działania. Jeśli na przykład operacja w kodzie nie powiedzie się lub jest nieprawidłowa, interfejs API zgłosi błąd HomeError. Upraszcza to i usprawnia obsługę błędów, ponieważ możesz skupić się tylko na błędach, które można naprawić. Możesz wtedy udostępnić opcje, np. pozwolić użytkownikowi spróbować ponownie lub wyświetlić komunikat „Nie znaleziono struktury”. A ponieważ nie musisz wyraźnie obsługiwać każdego możliwego wyjątku, Twój kod jest mniej zagmatwany 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 mogą się pojawić:
| 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órą próbujesz utworzyć, już istnieje. Może to być na przykład 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ź z serwera mogła zostać opóźniona na tyle, ż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 wywołasz
stop
na piekarniku, 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. Pamiętaj, ż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órego nie można znaleźć. Na
przykład podanie nieistniejącego identyfikatora utworu podczas wywoływania
play na urządzeniu odtwarzacza multimediów. |
outOfRange |
Parametr przekroczył prawidłowy zakres na podstawie bieżącego stanu systemu stanu. 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 powinien być interpretowany jako oznaczający, że żądanie jest w inny sposób prawidłowe. |
resourceExhausted |
Wykorzystano jakiś zasób. Może to być na przykład zgłoszone
gdy wywołasz
dispense(item:amount:unit:presetName:) na urządzeniu do
karmienia zwierząt, a w urządzeniu nie ma już jedzenia.Może to być też spowodowane przekroczeniem limitu projektu interfejsów Home API. Więcej informacji znajdziesz w artykule Zarządzanie 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 najczęściej stan przejściowy, który można rozwiązać, ponawiając próbę z czasem do ponowienia. Pamiętaj, że ponawianie operacji nieidempotentnych nie zawsze jest bezpieczne. |
unimplemented |
Wybrana operacja nie jest wdrożona, obsługiwana ani włączona w tej usłudze. |
unknown |
Nieznany błąd. Ogólnie rzecz biorąc, 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 na przykład zostać zwrócony, gdy wartość stanu otrzymana z zewnętrznego interfejsu API nie zawiera wystarczających
informacji o przyczynie głównej. |