私は少し検索しましたが、何も見つかりませんでした.このサイトの質問でさえありません.Swift 2がJavaのようなマルチキャッチブロックをサポートしているかどうか疑問に思っています.
Java の例:
try {
someMethod(); // throws ExceptionOne, ExceptionTwo
} catch(ExceptionOne | ExceptionTwo e) {
handleMyException();
} catch(Exception e2) {
handleOtherExceptions();
}
Swift では、同様のソリューションを実装できませんでした。This questionは、1つの列挙型のさまざまなエラーを処理するための優れた方法を説明して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 には本当にマルチキャッチが含まれていないのですか? または、私の問題を解決するのに役立つ別の解決策はありますか?
編集:私の希望する動作がはっきりしていないようです: タイプ HTTPError (HTTPError.NOT_FOUND を除く) のエラーを同じ方法で処理したいので、マルチキャッチを求めています。
認識していないすべてのエラー (タイムアウト、nil-access など) をカバーするために、一般的な catch-block を引き続き実装しますが、バックエンド メッセージに伴うエラーは特別に処理する必要があります。
ありがとう、チャッキー