schornon
(Serhii)
1
While fixing a bug in my project, I catch an interesting behavior of do-catch:
enum KnownError: Error {
case oops
}
enum UnknownError: Error {
case unknown
}
func methodThatThrowUnknownError() throws {
throw UnknownError.unknown
}
do {
print("do start")
try methodThatThrowUnknownError()
print("do finish")
} catch let error as KnownError {
print(error)
}
print("exit")
When we throw an UnknownError and our do-catch doesn't have a simple catch {...} in the end (that catch any error) - we will get stuck.
The print("exit") will never call.
I catch this behavior in Xcode 13.3, project with iOS 15.0.
Also, I tried to run this code via CLI and got:
I think, Xcode should show a live issue about missing common catch {...} block.
So, what do you think?
1 Like
GreatApe
(Gustaf Kugelberg)
2
This doesn't compile for me, I get the expected Errors thrown from here are not handled because the enclosing catch is not exhaustive error message.
XCode 13.4.1
1 Like
Jeehut
(Cihat Gündüz)
3
Like @GreatApe already said, your code shouldn't compile because you're not handling the "catch-all" case with just a simple catch. This is a requirement as of Swift 5.7 because the compiler can't possibly know what errors your methodThatThrowUnknownError() can potentially throw because Swift simply has no Precise Error Typing.