我有很多这样定义的错误:
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)
谢谢
答案 0 :(得分:1)
您可以在同一条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
}
不幸的是,如果不列出所有案例,就无法检索关联的值。