gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:06:30 24 4
gpt4 key购买 nike

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

例如

代码没有显示将抛出什么类型的错误。

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 */

关于error-handling - 快速错误处理 - 确定错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46621239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com