Swift:
Hantering av fel
Hur gör man:
Swift använder felhantering med do
, try
, och catch
-block. Låt oss ta en titt:
enum FileError: Error {
case fileDoesNotExist
case noPermission
}
func readFile(atPath path: String) throws -> String {
// Låtsas att vi har någon logik här för att kontrollera om en fil finns och om vi har tillåtelse att läsa den
let fileExists = false
let havePermission = true
if !fileExists {
throw FileError.fileDoesNotExist
}
if !havePermission {
throw FileError.noPermission
}
return "Filinnehållet skulle vara här"
}
do {
let fileContent = try readFile(atPath: "/path/to/file")
print(fileContent)
} catch FileError.fileDoesNotExist {
print("Hoppsan! Filen hittades inte.")
} catch FileError.noPermission {
print("Åh! Ingen tillåtelse att läsa filen.")
} catch {
print("Ett okänt fel inträffade.")
}
Exempel på utdata:
Hoppsan! Filen hittades inte.
Fördjupning
Felhantering var inte alltid så smidigt som det är nu. I Objective-C skulle du hantera pekare till NSError-objekt, vilket kändes klumpigt. Nu har vi ett mer elegant system med Swift enums och Error
-protokollet.
Swifts throw
låter oss signalera att något har blivit fel. do
-block fungerar som områden medvetna om fel, try
-prefixet anropar den riskfyllda verksamheten, och catch
hanterar saker om de går snett.
Optionals är ett alternativ för situationer som inte riktigt är “fel”-status, men som ändå kanske inte har något “resultat”. De liknar lite Schrödingers variabler – de har ett värde eller så har de inte det.
För verklig fördjupning, kolla in Result
-typer, som är finurliga hybrider mellan ordinarie retur- och felpatron.
Se även
- Officiell Swift-felhanteringsguide: Apple Docs
- Bästa praxis för felhantering i Swift: RayWenderlich.com
- Avancerad felhantering i Swift: Medium Artikel