見出し画像

Swiftのenumで種類が増えても落ちないようにしたい

次のようなenumをAPIから受け取ったJSONをパースして利用していたとします。

enum Kind: String, Decodable {
    case note
    case magazine
    case circle
}

しかし、サーバーの都合で種類が増えてしまったらアプリ側ではパースができずにerrorをthrowしてしまいます。ちゃんとエラーハンドリングをしていれば落ちることはないですが、アプリから見ると異常値が渡され、元々表示されていたものが表示されなくなったりとユーザーにとっても不都合を与えてしまうかもしれません。

解決方法

そもそも安易に値が増えるものはenumで定義すべきじゃないのかもしれないですが、Swiftを利用している場合にはenumで定義していた方がメリットも多いですよね。そこで一旦次のようにothersを定義して、既存の表示には影響を与えずエラーが発生しないようにすることで対応しました。

enum Kind: Decodable {    case note    case magazine    case circle    case others(String)    init(from decoder: Decoder) throws {        let container = try decoder.singleValueContainer()        let value = try container.decode(String.self)        switch value {            case “note”:
​                self = .note            case “magazine”:                self = .magazine            case “circle”:
​                self = .circle            default:                self = .others(value)        }    }
}

全てのenumをこのように定義するのは大変なのであくまでも用法・用量を守って適切な場所で利用しましょう。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
🙌🏻
21

こちらでもピックアップされています

#エンジニア 系記事まとめ
#エンジニア 系記事まとめ
  • 739本

noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。