gpt4 book ai didi

swift - 错误枚举 - 案例的通用参数

转载 作者:搜寻专家 更新时间:2023-11-01 06:56:00 24 4
gpt4 key购买 nike

我的应用程序中有示例错误枚举:

public enum APIError: Error {
case IncorrectArguments(message: String)
case MissingArgument(message: String)
}

错误处理看起来像:

do {
return try next.respond(to: request)
} catch let error as APIError {
throw Abort(.badRequest, reason: error.message)
}

但是我在这里遇到编译错误:“APIError”类型的值没有成员“message”

我知道我可以通过模式匹配获取参数,但我不想以完全相同的方式处理所有情况:

do {
return try next.respond(to: request)
} catch APIError.MissingArgument(let message) {
throw Abort(.badRequest, reason: message)
} catch APIError.IncorrectArguments(let message) {
throw Abort(.badRequest, reason: message)
}

将来枚举中可能会有更多的 APIErrors,我不想使用单独的 catch block 来处理每一个,因为每个人都会完全一样。

有没有办法以某种通用方式处理这些错误?

最佳答案

您可以像这样在枚举上定义计算属性:

public enum APIError: Error {
case IncorrectArguments(message: String)
case MissingArgument(message: String)

var message: String {
switch self {
case .IncorrectArguments(let message): return message
case .MissingArgument(let message): return message
}
}
}

然后像这样从 catch clouser 调用消息计算属性:

do {
return try next.respond(to: request)
} catch let error as APIError {
throw Abort(.badRequest, reason: error.message)
}

关于swift - 错误枚举 - 案例的通用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53321394/

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