swift - 在 Swift 中不使用 case 语句从错误枚举中获取消息
问题描述
我有一堆这样定义的错误:
public enum ClientError: Error {
//...
case badRequest(message: String)
case invalidParameter(message: String)
case notAuthorized(message: String)
case securityFailed(message: String)
//...
}
等等。清单很长
一些代码以特定方式处理,但对于其中大多数我只想显示一个message
. 但是,目前我们仍在处理 中的每种类型的错误switch
,因此我们可以收到一条消息:
switch(error) {
//...
case badRequest(let message):
displayError(message: message)
case invalidParameter(let message):
displayError(message: message)
case notAuthorized(let message):
someSpecialHandling()
case securityFailed(let message):
displayError(message: message)
//...
}
所以我想要的someSpecialHandling
只是切换,以防displayError(message: message)
万一default
。message
问题是:在这种情况下我该怎么办?这是我希望代码的样子:
switch(error) {
//...
case notAuthorized(let message):
someSpecialHandling()
default:
displayError(message: message) <-- how to obtain message here?
//...
}
或类似的东西:
switch(error) {
//...
case notAuthorized(let message):
someSpecialHandling()
default:
break
//...
}
let message = //get message from Error somehow
displayError(message: message)
谢谢
解决方案
case
您可以在同一语句中匹配具有相同关联值类型的值。
public enum ClientError: Error {
case badRequest(message: String)
case invalidParameter(message: String)
case notAuthorized(message: String)
case securityFailed(message: String)
case someOtherError(code: Int)
case anotherError(code: Int)
case whatever
}
//[...]
switch error {
case let .badRequest(message),
let .invalidParameter(message),
let .notAuthorized(message),
let .securityFailed(message):
// Handle the message
case let .someOtherError(code),let .anotherError(code):
// Handle the code
case. whatever:
// Do something
}
不幸的是,如果不列出所有案例,就无法检索相关值。
推荐阅读
- ruby-on-rails - 使用带有 belongs_to 关联的 RSpec 共享示例组
- excel - VBA HTML 网页拉取不匹配
- apache-spark - 检索 spark 完成工作所花费的时间
- c - C中的原子参数执行顺序
- r - R metafor forestplot 如何在列上方添加 CI 95% 标题
- ios - 为什么我不能为我的 App Store Connect 添加新的银行账户?
- algorithm - 在最大流量问题中,如何找到提供最大流量的所有可能路径集?
- r - 从 SparkR ML RF 中提取向量概率而不将 SparkDataFrame 强制转换为 R data.frame
- python-3.x - 模块日志记录的属性 funcName 返回一个默认的 Levelname
- python - python中大型数据集的多处理(查找重复项)