【发布时间】:2018-10-05 04:59:16
【问题描述】:
我已经看到在 Swift 中 NSError 和 Error 之间的区别已经有一个 question,我知道这些区别。但是,我不理解下面代码 sn-p 的行为,因为它编译正确。 Swift 的错误处理机制要求没有出现在带有 throws 子句的函数中的每个 do-catch 块都包含一个通用处理程序(catch 没有其他内容,或者 catch 表示错误)。但是,使用NSError 似乎具有相同的效果。这里有人知道原因吗?我在another question 中读到“任何符合 ErrorType 的类都可以转换为 NSError。这些特性在文档中进行了描述。”。但是,该答案所指向的documentation 并未向我阐明这一点,因为它侧重于我没有使用的 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)
}
}
【问题讨论】:
标签: swift error-handling nserror do-catch