Menu
Coddy logo textTech

try? und try!

Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy. Lektion 46 von 56.

Manchmal ist dir egal, welchen Fehler eine Funktion ausgelöst hat; du möchtest einfach ein Ergebnis oder einen Fallback. Swift bietet dir dafür zwei Kurzformen.

try? wandelt jeden ausgelösten Fehler in nil um. Das Ergebnis ist ein Optional des Rückgabetyps der Funktion:

enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }

let result = try? risky()        // nil
let safe   = (try? risky()) ?? 0 // 0

Kombiniere es mit ?? für einen Inline-Standardwert. Dies ist die kürzeste Version von „Rufe dieses Ding auf, gib mir so oder so einen Wert“.

try! sagt: „Ich weiß, dass dies keinen throw auslösen wird.“ Wenn es doch passiert, stürzt dein Programm ab. Verwende es nur, wenn du beweisen kannst, dass der Aufruf sicher ist; im alltäglichen Code solltest du try? mit einem fallback oder das vollständige do/catch bevorzugen.

challenge icon

Aufgabe

Einfach

Definiere NumError: Error mit einem Fall bad. Definiere eine auslösende Funktion parseEven(_ s: String) throws -> Int, die:

  • .bad auslöst, wenn s nicht als Int geparst werden kann oder wenn der geparste Wert ungerade ist
  • andernfalls die geparste Ganzzahl zurückgibt

Lies eine einzelne Eingabezeile ein: eine durch Kommas getrennte Liste von Zeichenfolgen. Verwende für jede davon try?, gefolgt von ?? -1, um entweder die geparste gerade Ganzzahl oder -1 zu erhalten.

Gib die resultierenden Ganzzahlen in derselben Reihenfolge aus, verbunden mit ,. Gib dann in einer zweiten Zeile die Anzahl der Werte aus, die als -1 zurückgegeben wurden.

Für die Eingabe 4,7,abc,8,11,2 lautet die Ausgabe:

4,-1,-1,8,-1,2
3

Probier es selbst

let parts = readLine()!.components(separatedBy: ",")

// TODO: enum NumError; func parseEven(_:) throws -> Int;
// für jeden part, (try? parseEven(part)) ?? -1
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss

Übe selbstständig: Swift-Playground