Error handling 快速错误处理-确定错误类型
在Swift错误处理中-在不查看实现的情况下,如何知道抛出的错误类型,以及如何处理方法可以抛出ErrorType派生错误和NSError的情况 e、 g 代码不显示将抛出的错误类型Error handling 快速错误处理-确定错误类型,error-handling,swift2,Error Handling,Swift2,在Swift错误处理中-在不查看实现的情况下,如何知道抛出的错误类型,以及如何处理方法可以抛出ErrorType派生错误和NSError的情况 e、 g 代码不显示将抛出的错误类型 public func decode(jwt: String) throws -> JWT { return try DecodedJWT(jwt: jwt) } 您可以捕获一个变量抛出的错误,并对该变量进行运行时分析。例如,对于一些未知的实现: /* ---------------------- *
public func decode(jwt: String) throws -> JWT {
return try DecodedJWT(jwt: jwt)
}
您可以捕获一个变量抛出的错误,并对该变量进行运行时分析。例如,对于一些未知的实现:
/* ---------------------- */
/* unknown implementation */
enum HiddenError: ErrorType {
case SomeError
}
class AnotherError : NSError { }
func foo() throws -> Int {
let foo = arc4random_uniform(3);
if foo == 0 {
throw HiddenError.SomeError
}
else if foo == 1 {
throw AnotherError(domain: "foo", code: 0, userInfo: [:])
}
else if foo == 2 {
throw NSError(domain: "foo", code: 0, userInfo: [:])
}
else {
return Int(foo)
}
}
/* ---------------------- */
将错误调查为:
/* "External" investigation */
func bar() throws -> Int {
return try foo()
}
func fuzz() {
do {
let buzz = try bar()
print("Success: got \(buzz)")
} catch let unknownError {
print("Error: \(unknownError)")
print("Error type: \(unknownError.dynamicType)")
if let dispStyle = Mirror(reflecting: unknownError).displayStyle {
print("Error type displaystyle: \(dispStyle)")
}
}
}
fuzz()
/* Output examples:
Error: SomeError
Error type: HiddenError
Error type displaystyle: Enum
//
Error: Error Domain=foo Code=0 "(null)"
Error type: AnotherError
Error type displaystyle: Class
//
Error: Error Domain=foo Code=0 "(null)"
Error type: NSError
Error type displaystyle: Class */
至少对于您问题的一部分,这里可能有一个答案:因此无法提前知道将抛出什么类型的错误?如果您调用的抛出方法是一个黑盒(没有文档),那么您将需要运行时内省来调查该方法可能抛出的错误类型。但是,通常情况下,情况不应该是这样,您可以将
catch
子句与要抛出的特定错误联系起来。还要注意的是,以上所有错误都符合ErrorType
(Swift中抛出的错误必须是符合此要求的类型)。