Swift:
Feilhåndtering

Hvordan:

Swift bruker feilhåndtering med do, try og catch blokker. La oss ta en titt:

enum FileError: Error {
    case fileDoesNotExist
    case noPermission
}

func readFile(atPath path: String) throws -> String {
    // Forestill deg at vi har litt logikk her for å sjekke om en fil finnes og om vi har tillatelse til å lese den
    let fileExists = false
    let havePermission = true

    if !fileExists {
        throw FileError.fileDoesNotExist
    }

    if !havePermission {
        throw FileError.noPermission
    }

    return "Filinnhold går her"
}

do {
    let fileContent = try readFile(atPath: "/path/to/file")
    print(fileContent)
} catch FileError.fileDoesNotExist {
    print("Oisann! Filen ble ikke funnet.")
} catch FileError.noPermission {
    print("Åh! Ingen tillatelse til å lese filen.")
} catch {
    print("En ukjent feil oppstod.")
}

Eksempel på utdata:

Oisann! Filen ble ikke funnet.

Dypdykk

Feilhåndtering var ikke alltid så elegant som den er nå. I Objective-C ville du håndtere pekere til NSError-objekter, noe som føltes klumpete. Nå har vi et mer elegant system med Swift enums og Error protokollen.

Swifts throw lar oss signalisere at noe har gått galt. do blokker fungerer som feilbevisste områder, try prefiks kaller risikabel forretning, og catch håndterer ting hvis de går sørover.

Optionals er et alternativ for situasjoner som ikke helt er “feil” status, men som likevel kan ha “intet resultat”. De er litt som Schrödingers variabler—de har en verdi eller så har de ikke det.

For virkelig dybde, sjekk ut Result typer, som er elegante hybrider mellom vanlig-retur og feilmønstre.

Se også