我正在创建一个应该返回错误的库,所以我想知道哪个应该用于我的目的.
更新: 我应该澄清,返回的结果将来自异步调用,所以我需要通知用户是否有错误,我想知道哪种类型我应该使用Error或NSError.
文档和流行的博客建议使用do-catch完成Swift错误处理,并处理ErrorType枚举或NSError实例.
在try catch块中,ErrorType枚举和NSError实例是否互斥?如果没有,你如何实现抛出两者的函数?
我已经将一个NSError实例与这样的枚举相关联,这似乎有效,但这是否是返回详细错误信息的事实上的方法?
enum Length : ErrorType {
case NotLongEnough(NSError)
case TooLong(NSError)
}
func myFunction() throws {
throw Length.NotLongEnough(NSError(domain: "domain", code: 0, userInfo: [NSLocalizedFailureReasonErrorKey: "Not long enough mate"]))
}
do {
try myFunction()
} catch Length.NotLongEnough(let error) {
print("\(error)")
}
Run Code Online (Sandbox Code Playgroud)
此示例显示如何将ErrorType强制转换为NSError.
do {
let str = try NSString(contentsOfFile: "Foo.bar",
encoding: NSUTF8StringEncoding)
}
catch let error as NSError {
print(error.localizedDescription)
}
Run Code Online (Sandbox Code Playgroud)
我找不到符合NSString的ErrorType的错误枚举,所以我们应该假设它是一个NSError实例吗?当然,我们可以运行代码以确保,但文档肯定应该让我们知道.(我很欣赏我可能会误读文档)