SwiftのErrorのlocalizedDescriptionをカスタマイズする
SwiftのError
APIなどでエラーが発生した際にどのようなエラーになっているかをハンドリングするプロトコルです。
任意のenumを作成してErrorに準拠させます。
enum SomeError: Error {
case hoge
case fuga
}
カスタマイズする利点
localizedDescriptionをカスタマイズすることでエラーメッセージを表示する際にわざわざエラー処理用のクラスを作る必要がなくなり、エラーをキャッチした際のダイアログの表示ロジックがシンプルになり可読性が向上します。
LocalizedErrorに準拠する
localizedDescriptionをカスタマイズするにはErrorの他にLocalizedErrorに準拠させる必要があります。
enum SomeError: Error, LocalizedError {
case hoge
case fuga
var errorDescription: String? {
switch self {
case .hoge:
return "hoge Error"
case .fuga:
return "fuga Error"
}
}
}
LocalisedErrorに準拠させてerrorDescriptionにエラーメッセージを返すことでlocalizedDescriptionをカスタマイズすることができます。
localizedDescriptionにメッセージを返してもlocalizedDescriptionにメッセージは渡らないので注意してください。
まとめ
localizedDescriptionをカスタマイズすることでエラーをthrowするだけでカスタマイズされたメッセージをダイアログなどに表示できてメッセージの管理クラスなどを実装しなくて住むのでコード量が減って可読性が向上するのでおすすめです。
Rxswiftでエラーが流れてきたときの処理もシンプルになるのでとても良いと感じました。
SwiftのError
APIなどでエラーが発生した際にどのようなエラーになっているかをハンドリングするプロトコルです。
任意のenumを作成してErrorに準拠させます。
enum SomeError: Error {
case hoge
case fuga
}
カスタマイズする利点
localizedDescriptionをカスタマイズすることでエラーメッセージを表示する際にわざわざエラー処理用のクラスを作る必要がなくなり、エラーをキャッチした際のダイアログの表示ロジックがシンプルになり可読性が向上します。
LocalizedErrorに準拠する
localizedDescriptionをカスタマイズするにはErrorの他にLocalizedErrorに準拠させる必要があります。
enum SomeError: Error, LocalizedError {
case hoge
case fuga
var errorDescription: String? {
switch self {
case .hoge:
return "hoge Error"
case .fuga:
return "fuga Error"
}
}
}
LocalisedErrorに準拠させてerrorDescriptionにエラーメッセージを返すことでlocalizedDescriptionをカスタマイズすることができます。
localizedDescriptionにメッセージを返してもlocalizedDescriptionにメッセージは渡らないので注意してください。
まとめ
localizedDescriptionをカスタマイズすることでエラーをthrowするだけでカスタマイズされたメッセージをダイアログなどに表示できてメッセージの管理クラスなどを実装しなくて住むのでコード量が減って可読性が向上するのでおすすめです。
Rxswiftでエラーが流れてきたときの処理もシンプルになるのでとても良いと感じました。
Discussion