Ein Protokoll (protocol) beschreibt Eigenschaften und Methoden, die Typen umsetzen müssen, ähnlich einem Interface. Mit Erweiterungen (extension) fügst du bestehenden Typen Funktionen hinzu. Fehler beschreibst du als enum mit Error, wirfst sie mit throw und fängst sie mit do/try/catch.
protocol Laut {
func laut() -> String
}
struct Hund: Laut {
func laut() -> String { "Wuff" }
}
extension Int {
var istGerade: Bool { self % 2 == 0 }
}
print(4.istGerade)
enum EingabeFehler: Error { case keineZahl }
func lies(_ s: String) throws -> Int {
guard let z = Int(s) else { throw EingabeFehler.keineZahl }
return z
}
do { print(try lies("abc")) }
catch { print("Fehler: \(error)") }Merke
Protokolle beschreiben Verträge
extensionerweitert vorhandene Typenthrow,try,catchfür Fehler
Aufgabe
Schreibe ein Protokoll `Flaeche` und setze es für zwei Formen um.