1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Swift】String型(やInt, Double etc...)からEnumへの変換

Last updated at Posted at 2025-02-16

概要

String型からEnumに変換してプロジェクト内で使うシーンは多々ありますよね
簡単かつ雑にまとめておきます

変換方法

以下のドキュメントにあるRawRepresentableプロトコルのイニシャライザを使う。
もう本当にそれだけです笑

実際に使ってみると以下のようになります。

// ※String型のRawRepresentableに準拠させる
enum Fruit: String {
    case apple
    case banana
    case orange
}

let fruit = Fruit(rawValue: "apple") // ここでrawValueからEnumインスタンス生成
print(fruit) // Optional(Fruit.apple)

// enumなので分岐も網羅できて良き
if let fruit {
    switch fruit {
    case .apple, .orange:
        print("This is an " + fruit.rawValue)
    case .banana:
        print("This is a " + fruit.rawValue)
    }
}

このような感じで、Enumのイニシャライザ引数であるrawValueに変換したい文字列を渡してあげることで、Enumのインスタンスが生成されます。

ポイント

  1. 変換先のEnumはString型を割り当てる
  2. init(rawValue:)イニシャライザの引数に変換したい文字列を指定

case名と異なる文字列をEnumに変換することも可能です。

// 対応する文字列を各caseに割り当てる
enum Fruit: String {
    case apple = "リンゴ"
    case banana = "バナナ"
    case orange = "オレンジ"
}

let fruit = Fruit(rawValue: "オレンジ")
print(fruit) // Optional(Fruit.orange)

注意点

生成されたインスタンスは、Optional型で、対応するcaseがない場合はnilを返します。
以下をご覧ください。

enum Fruit: String {
    case apple
    case banana
    case orange
}

let fruit = Fruit(rawValue: "peach")
print(fruit) // nil


このようにcaseに定義していない文字列から生成した場合nilになりますので、
アンラップするなり、nilの場合の処理を追加するなりして使用しましょう。

ちなみに

今回Stringからの変換で紹介しましたが、init(rawValue:)のイニシャライザはRawRepresentableプロトコルに準拠していれば使用ができます。
そのため、Int, Float, Doubleなどでも使用できます。

enum Temperature: Double {
    case cold = -10.5
    case warm = 20.0
    case hot = 35.5
}

let temp = Temperature(rawValue: 20.0)
print(temp) // Optional(Temperature.warm)

おわりに

かなり簡単に変換ができましたね。
個人的にはAPIレスポンスで受け取った文字列から、モバイル側でEnum管理するパターンがかなり多いためよく使用します。
(なのにあってるっけ...ってなるのでまとめました)
覚えておきましょう!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?