Nach der Suche nach einigen Referenzen, um herauszufinden, - leider - ich konnte nicht nützlich finden - und einfache Beschreibung über das Verständnis der Unterschiede zwischen throws
und rethrows
. Es ist etwas verwirrend, wenn Sie versuchen zu verstehen, wie wir sie verwenden sollten.Was sind die Unterschiede zwischen Würfen und Wiederholungen in Swift?
Ich würde erwähnen, dass ich bin ein bisschen vertraut mit dem -Default- throws
mit seiner einfachsten Form für einen Fehler propagieren, wie folgt:
enum CustomError: Error {
case potato
case tomato
}
func throwCustomError(_ string: String) throws {
if string.lowercased().trimmingCharacters(in: .whitespaces) == "potato" {
throw CustomError.potato
}
if string.lowercased().trimmingCharacters(in: .whitespaces) == "tomato" {
throw CustomError.tomato
}
}
do {
try throwCustomError("potato")
} catch let error as CustomError {
switch error {
case .potato:
print("potatos catched") // potatos catched
case .tomato:
print("tomato catched")
}
}
So weit so gut, aber das Problem tritt auf, wenn:
func throwCustomError(function:(String) throws ->()) throws {
try function("throws string")
}
func rethrowCustomError(function:(String) throws ->()) rethrows {
try function("rethrows string")
}
rethrowCustomError { string in
print(string) // rethrows string
}
try throwCustomError { string in
print(string) // throws string
}
, was ich bisher weiß, ist, wenn eine Funktion aufrufen, die throws
es von einem try
behandelt werden muss, im Gegensatz zu den rethrows
. Na und?! Was ist eine Logik, der wir bei der Entscheidung, throws
oder rethrows
zu verwenden, folgen sollten?
Große Antwort. Vielen Dank. – Darko
Der letzte Satz ist golden! – Klaas
Ich denke, um es zusammenzufassen, 'retrow' wenn du * werfen * willst. 'throw' wenn du ** immer auf ** werfen willst – Honey