エラーハンドリング、Errorの使い方
概要
Errorのクラスの使い道を考えてみた。
結論
下記のようなextension
を作成します。
import Foundation
extension Error {
var domain: String {
(self as NSError).domain
}
var code: Int {
(self as NSError).code
}
var info: [String: String] {
guard let userInfo = (self as NSError).userInfo as? [String: String] else { return [:] }
return userInfo
}
}
エラー発生時は下記のようにします。
定数
import Foundation
enum AppConstant {
static let LocalizedSuggestion = "LocalizedSuggestion"
}
下記のようにします。
completion(.failure(NSError(domain: "Server Error",
code: -10001,
userInfo: [AppConstant.LocalizedSuggestion: "Http response header invalid status code: \(response.statusCode)"])))
それを呼ぶときは下記のようにします。
api.session { error in
DispatchQueue.main.async {
self.alert(title: error.domain,
message: error.info[AppConstant.LocalizedSuggestion])
print(error)
}
}
こうすることにより、Error
クラスを有意義に活用できます。
これまで様々な人のエラーハンドリング時の文言などをみてきましたが、大体はString
クラスを用いるだとか、struct
を用いるだとか、error.localizedDescription
を用いるだとかが多いですが、
今回のこの方法が良いのでは無いかと思うわけであります。