それを把握するためにいくつかの参照を検索した後、私は間の違いを理解に関する有用な-and simple-説明を見つけることができませんでした-unfortunately-throws
とをrethrows
。それらをどのように使用すべきかを理解しようとすると、ちょっと混乱します。
私はthrows
、次のように、エラーを伝播するための最も単純な形式の-default-にある程度精通していることを述べておきます。
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")
}
}
これまでのところ良好ですが、次の場合に問題が発生します。
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
}
私がこれまでに知っているthrows
ことは、関数を呼び出すときにtry
、とは異なり、で処理する必要があるということrethrows
です。だから何?!我々が使用することを決定する際に従うべきであるとの論理は何であるthrows
かはrethrows
?