Swift:
Fehlerbehandlung

Wie geht das:

Swift verwendet Fehlerbehandlung mit do, try und catch Blöcken. Schauen wir uns das an:

enum FileError: Error {
    case fileDoesNotExist
    case noPermission
}

func readFile(atPath path: String) throws -> String {
    // Stellen Sie sich vor, wir haben hier etwas Logik, um zu prüfen, ob eine Datei existiert und ob wir die Berechtigung zum Lesen haben
    let fileExists = false
    let havePermission = true

    if !fileExists {
        throw FileError.fileDoesNotExist
    }

    if !havePermission {
        throw FileError.noPermission
    }

    return "Dateiinhalt geht hier"
}

do {
    let fileContent = try readFile(atPath: "/path/to/file")
    print(fileContent)
} catch FileError.fileDoesNotExist {
    print("Hoppla! Datei nicht gefunden.")
} catch FileError.noPermission {
    print("Ah! Keine Berechtigung, um die Datei zu lesen.")
} catch {
    print("Ein unbekannter Fehler ist aufgetreten.")
}

Beispielausgabe:

Hoppla! Datei nicht gefunden.

Vertiefung

Die Fehlerbehandlung war nicht immer so elegant wie jetzt. In Objective-C hatte man es mit Zeigern auf NSError-Objekte zu tun, was recht umständlich war. Jetzt haben wir ein eleganteres System mit Swift Aufzählungen (enums) und dem Error-Protokoll.

Swifts throw lässt uns signalisieren, dass etwas schiefgegangen ist. do-Blöcke fungieren wie fehlerbewusste Bereiche, try leitet die riskanten Vorgänge ein, und catch kümmert sich um die Dinge, falls sie schiefgehen.

Optionals sind eine Alternative für Situationen, die nicht ganz den “Fehler”-Status erreichen, aber dennoch “kein Ergebnis” haben könnten. Sie sind ein bisschen wie Schrödingers Variablen - sie haben einen Wert oder sie haben keinen.

Für echte Tiefe schauen Sie sich Result-Typen an, die schicke Hybride zwischen normaler Rückgabe und Fehlermustern sind.

Siehe auch