🙌

SwiftのErrorのlocalizedDescriptionをカスタマイズする

2 min read

SwiftのError

APIなどでエラーが発生した際にどのようなエラーになっているかをハンドリングするプロトコルです。

参考URL

任意の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でエラーが流れてきたときの処理もシンプルになるのでとても良いと感じました。