Fehlerbehandlung unter iOS

Swift bietet integrierte Unterstützung für das Auslösen und Auffangen von wiederherstellbaren Fehlern zur Laufzeit. Wenn beispielsweise ein Vorgang in Ihrem Code fehlschlägt oder ungültig ist, löst die API einen HomeError-Fehler aus. Dadurch wird die Fehlerbehandlung vereinfacht und optimiert, da Sie sich nur auf wiederherstellbare Fehler konzentrieren können. Sie können dann Optionen anbieten, z. B. dem Nutzer die Möglichkeit geben, es noch einmal zu versuchen, oder eine Meldung wie „Gebäude nicht gefunden“ anzeigen. Da Sie nicht jede mögliche Ausnahme explizit behandeln müssen, ist Ihr Code weniger überladen und bleibt daher stärker auf seinen Hauptzweck ausgerichtet.

Beispiel für den Umgang mit einem wiederherstellbaren 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 Bedeutungen der HomeError-Codes, die Ihnen möglicherweise begegnen:

Tabelle: HomeError codes
Code Bedeutung
aborted Der Vorgang wurde abgebrochen. Dieser Fehler tritt in der Regel auf, wenn ein Parallelitätsproblem vorliegt, z. B. ein fehlgeschlagener Sequencer-Check oder ein Transaktionsabbruch.
alreadyExists Die Ressource oder Entität, die Sie erstellen möchten, ist bereits vorhanden. Dies kann beispielsweise ein benanntes Programm für einen Thermostat sein.
cancelled Der Vorgang wurde abgebrochen, üblicherweise vom Aufrufer.
dataLoss Dauerhafter Datenverlust oder Datenkorruption.
deadlineExceeded Die Frist ist abgelaufen, bevor der Vorgang abgeschlossen werden konnte. Bei Vorgängen, die den Systemstatus verändern, kann dieser Fehler angezeigt werden, auch wenn der Vorgang erfolgreich abgeschlossen wurde. Zum Beispiel 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 der Systemzustand nicht für die Ausführung des Vorgangs geeignet ist. Diese Meldung wird beispielsweise angezeigt, wenn Sie stop für einen Ofen aufrufen, der bereits ausgeschaltet ist.
internal Interne Fehler. Das bedeutet, dass einige Invarianten, die vom zugrunde liegenden System erwartet werden, nicht erfüllt wurden. Dieser Fehlercode ist für schwerwiegende Fehler reserviert.
invalidArgument Der Client hat ein ungültiges Argument angegeben. Hinweis: Dieser Wert unterscheidet sich von „failedPrecondition“. „invalidArgument“ gibt Argumente an, die unabhängig vom Systemstatus problematisch sind (z. B. ein ungültiger Dateiname).
notFound Sie haben eine Entität oder Ressource angegeben, die nicht gefunden werden kann. Beispiel: Wenn beim Aufrufen von play auf einem Mediaplayer-Gerät eine nicht vorhandene Titel-ID angegeben wird.
outOfRange Ein Parameter hat den gültigen Bereich überschritten, basierend auf dem aktuellen Systemstatus. Diese Meldung wird angezeigt, wenn der Wert zwar im Bereich der Werte liegt, die der API-Aufruf möglicherweise akzeptiert, aber im vorliegenden Kontext keinen Sinn ergibt.
permissionDenied Sie sind nicht berechtigt, den angegebenen Vorgang auszuführen. Dieser Fehlercode bedeutet nicht, dass die Anfrage ansonsten gültig ist.
resourceExhausted Eine Ressource ist aufgebraucht. Das kann beispielsweise passieren, wenn jemand dispense(item:amount:unit:presetName:) auf einen Futterautomaten für Haustiere sendet und kein Futter mehr im Gerät vorhanden ist.
unauthenticated Der Anrufer kann nicht identifiziert werden oder die Anfrage enthält keine gültigen Anmeldedaten.
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. unknown wird in der Regel angezeigt, wenn eine Fehlerbedingung auftritt, die mit keinem der anderen Fehlercodes klassifiziert werden kann. Dieser Fehler wird beispielsweise zurückgegeben, wenn ein Statuswert von einer externen API empfangen wird, der nicht genügend Informationen zur Ursache enthält.