Fehlerbehandlung unter iOS

Swift bietet integrierte Unterstützung für das Auslösen und Abfangen von wiederherstellbaren Fehlern zur Laufzeit. Wenn beispielsweise ein Vorgang in Ihrem Code fehlschlägt oder ungültig ist, gibt die API einen HomeError-Fehler aus. Das vereinfacht und optimiert die Fehlerbehandlung, da Sie sich nur auf behebbare Fehler konzentrieren müssen. Du kannst dann Optionen anbieten, z. B. den Nutzer noch einmal versuchen lassen oder eine Meldung wie „Gebäude nicht gefunden“ anzeigen. Da Sie nicht jede mögliche Ausnahme explizit behandeln müssen, ist Ihr Code weniger unübersichtlich und bleibt daher stärker auf seinen Hauptzweck fokussiert.

Beispiel für den Umgang mit einem behebbaren Fehler:

    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
    }

In der folgenden Tabelle finden Sie die Bedeutung der HomeError-Codes, die auftreten können:

Tabelle: HomeError-Codes
Code Bedeutung
aborted Der Vorgang wurde abgebrochen. Dies wird in der Regel angezeigt, wenn ein Parallelitätsproblem vorliegt, z. B. ein Fehler bei der Sequenzprüfung oder ein Transaktionsabbruch.
alreadyExists Die Ressource oder Entität, die Sie erstellen möchten, ist bereits vorhanden. Das kann beispielsweise ein benanntes Programm für einen Thermostat sein.
cancelled Der Vorgang wurde abgebrochen, üblicherweise vom Aufrufer.
dataLoss Nicht wiederherstellbarer Datenverlust oder Datenkorruption.
deadlineExceeded Die Frist ist abgelaufen, bevor der Vorgang abgeschlossen werden konnte. Bei Vorgängen, die den Status des Systems ändern, kann dieser Fehler auch dann zurückgegeben werden, wenn der Vorgang erfolgreich abgeschlossen wurde. Beispielsweise könnte eine erfolgreiche Antwort von einem Server so lange verzögert worden sein, dass die Frist abgelaufen ist.
failedPrecondition Der Vorgang wurde abgelehnt, weil sich das System nicht in einem für die Ausführung des Vorgangs erforderlichen Zustand befindet. Diese Meldung wird beispielsweise angezeigt, wenn du stop für einen Ofen aufgerufen hast, der bereits ausgeschaltet ist.
internal Interne Fehler. Das bedeutet, dass einige vom zugrunde liegenden System erwartete Invarianten verletzt wurden. Dieser Fehlercode ist für schwerwiegende Fehler reserviert.
invalidArgument Der Client hat ein ungültiges Argument angegeben. Dieser Wert ist nicht identisch mit „failedPrecondition“. „invalidArgument“ gibt Argumente an, die ungeachtet des Systemstatus problematisch sind (z. B. ein ungültiger Dateiname).
notFound Sie haben eine Entität oder Ressource angegeben, die nicht gefunden werden kann. Beispiel: Angabe einer nicht vorhandenen Track-ID beim Aufrufen von play auf einem Mediaplayer-Gerät.
outOfRange Ein Parameter hat den gültigen Bereich basierend auf dem aktuellen Systemstatus überschritten. Diese Meldung wird angezeigt, wenn der Wert innerhalb des Wertebereichs liegt, den der API-Aufruf potenziell akzeptieren könnte, aber im aktuellen Kontext keinen Sinn ergibt.
permissionDenied Sie sind nicht berechtigt, den angegebenen Vorgang auszuführen. Dieser Fehlercode sollte nicht so interpretiert werden, dass die Anfrage ansonsten gültig ist.
resourceExhausted Eine Ressource ist ausgelastet. Dies kann beispielsweise der Fall sein, wenn dispense(item:amount:unit:presetName:) auf einem Futterautomaten aufgerufen wird und kein Futter mehr im Gerät vorhanden ist.

Dies kann auch daran liegen, dass ein Home APIs-Projektkontingent überschritten wurde. Weitere Informationen finden Sie unter Kontingentverwaltung.
unauthenticated Der Aufrufer kann nicht identifiziert werden oder die Anfrage enthält keine gültigen Authentifizierungsdaten.
unavailable Der Dienst ist nicht verfügbar. Dies ist höchstwahrscheinlich ein vorübergehender Zustand, der durch Wiederholen mit einem Backoff korrigiert werden kann. Es ist nicht immer sicher, nicht idempotente Vorgänge zu wiederholen.
unimplemented Der angeforderte Vorgang ist in diesem Dienst nicht implementiert, wird nicht unterstützt oder ist nicht aktiviert.
unknown Unbekannter Fehler. Im Allgemeinen wird unknown angezeigt, wenn ein Fehler auftritt, der mit keinem der anderen Fehlercodes klassifiziert werden kann. Dieser Fehler wird z. B. angezeigt, wenn ein von einer externen API erhaltener Statuswert nicht genügend Informationen zur Ursache enthält.