Fangklauseln in Swift müssen erschöpfend sein. Bedeutet das, dass ich immer einen Platzhalter oder leere Catch-Klauseln verwenden muss, wenn ich die Fehlerfortpflanzung vermeiden möchte? Beispiel:Erschöpfende Fangblöcke ohne Leer- oder Wildcard in Swift 3.1
enum Oops: Error {
case oh, ouch, meh
}
func troublemaker() {
do { throw Oops.meh }
catch Oops.oh {}
catch Oops.ouch {}
catch Oops.meh {}
// Error: Error is not handled because the enclosing catch is not exhaustive
}
Natürlich ist es fest, wenn ich throws
auf die Funktion hinzuzufügen. Dasselbe gilt für das Hinzufügen entweder catch {}
oder catch _ {}
.
Aber gibt es eine Möglichkeit, erschöpfende Fangblöcke auf andere Weise zu machen? Wie vielleicht, den zulässigen Typ des Fehlers zu definieren, um zu werfen, also würde mein Enum-Fehler es erschöpfend machen?
Sie können nicht angeben, welche Fehler geworfen werden. Vergleichen Sie https://stackoverflow.com/questions/39618095/cani-restrict-the-type-that-a-function-throws-in-swift oder https://stackoverflow.com/questions/30740997/what-is -the-difference-zwischen-swift-2-0-do-try-catch-und-regulär-java-cc-ex. –
Siehe auch https://stackoverflow.com/q/40718542/2976878 – Hamish