我已经看到关于 Swift 和 Swift 之间的区别已经存在一个问题,我知道这些区别。但是,我不理解下面代码片段的行为,因为它编译正确。Swift 的错误处理机制要求每个没有出现在带有 throws 子句的函数中的 do-catch 块都包含一个通用处理程序(没有其他内容或for Error)。但是,似乎 using具有相同的效果。这里有人知道原因吗?我在另一个问题中读到“任何符合 ErrorType 的类都可以转换为 NSError。这些功能在文档中进行了描述。”。但是,文档NSErrorErrorcatchcatchNSError该答案所指出的并没有向我澄清这一点,因为它侧重于我没有使用的 Objective-C。
import Foundation
extension Int : Error {}
extension String : Error {}
func fErr() throws {
let a = Int(readLine()!)!
if a > 20 {
throw 42
} else {
throw "An error occurred"
}
}
func gErr() {
do {
try fErr()
} catch let e as NSError {
print(e)
}
}