Error handling 快速错误处理-确定错误类型

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) } 您可以捕获一个变量抛出的错误,并对该变量进行运行时分析。例如,对于一些未知的实现: /* ---------------------- *

在Swift错误处理中-在不查看实现的情况下,如何知道抛出的错误类型,以及如何处理方法可以抛出ErrorType派生错误和NSError的情况

e、 g

代码不显示将抛出的错误类型

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中抛出的错误必须是符合此要求的类型)。