【发布时间】:2016-05-25 16:16:39
【问题描述】:
我四处搜索了一番,但没有找到任何东西——在这个网站上什至没有一个问题——所以现在我想知道 Swift 2 是否像 Java 那样支持多捕获块。
Java-示例:
try {
someMethod(); // throws ExceptionOne, ExceptionTwo
} catch(ExceptionOne | ExceptionTwo e) {
handleMyException();
} catch(Exception e2) {
handleOtherExceptions();
}
在 Swift 中,我无法实现类似的解决方案。这个question 解释了一种处理ErrorType 枚举的不同错误的好方法,但是我的要求似乎不同,因为我的错误是使用来自HTTP 响应的消息初始化的。这是我的枚举:
enum HTTPError: ErrorType {
case BAD_REQUEST(message: String)
case UNAUTHORIZED(message: String)
case NOT_FOUND
case INTERNAL_SERVER_ERROR(message: String)
case NOT_IMPLEMENTED(message: String)
static func getErrorForStatusCode(statusCode: Int, message: String? = nil) -> HTTPError {
switch statusCode {
case 400:
return HTTPError.BAD_REQUEST(message: message!)
case 401:
return HTTPError.UNAUTHORIZED(message: message!)
case 404:
return HTTPError.NOT_FOUND
case 500:
return HTTPError.INTERNAL_SERVER_ERROR(message: message!)
case 501:
return HTTPError.NOT_IMPLEMENTED(message: message!)
default:
return HTTPError.INTERNAL_SERVER_ERROR(message: message!)
}
}
}
当我想抛出那个枚举的错误时,我使用这样的代码:
func someMethod() throws {
...
HTTPError.getErrorForStatusCode(400, message: "Field X missing") // Actual values coming from HTTP-response
...
}
现在,在调用方法中,我必须分别捕获枚举的每个错误,尽管我希望它们都做同样的事情(NOT_FOUND 除外,但这并不重要):
try {
someMethod() // throws
} catch HTTPError.BAD_REQUEST(let message) {
// display 'message' to user
} catch HTTPError.UNAUTHORIZED(let message) {
// display 'message' to user
} catch HTTPError.INTERNAL_SERVER_ERROR(let message) {
// display 'message' to user
}
...
Swift 2 真的不包含 multi-catch 吗?或者是否有其他解决方案可以帮助我解决我的问题?
编辑:似乎我想要的行为不是很清楚:我想以同样的方式处理 HTTPError 类型的错误(HTTPError.NOT_FOUND 除外),这就是我要求的原因多抓。
我仍然会实现一个通用的 catch-block 来覆盖所有我不知道的错误(例如超时、nil-access 等),但是那些带有后端消息的错误应该被特殊处理。
谢谢, 胖乎乎的
【问题讨论】:
标签: swift2 try-catch multi-catch