Après la recherche de quelques références à la figure, malheureusement je ne pouvais pas trouver utile et simple - description sur la compréhension des différences entre throws
et rethrows
. C'est un peu déroutant lorsque vous essayez de comprendre comment nous devrions les utiliser.
Je tiens à mentionner que je suis un peu familier avec l'-par défaut- throws
avec sa forme la plus simple de propagation d'une erreur, comme suit:
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")
}
}
C'est très bien, mais le problème se pose lorsque:
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
}
ce que je sais, c'est quand l'appel d'une fonction qui throws
il doit être manipulé par un try
, contrairement à l' rethrows
. Et alors?! Quelle est la logique que nous devrions suivre avant de décider d' throws
ou rethrows
?