LoginSignup
10
8

More than 5 years have passed since last update.

Objective-cでENUMに対応する文字列を定義する

Posted at

Objective-cでは列挙をENUMで表す際に文字列で定義する事ができないので、
ENUMに対応できるマクロを作成することで対応しました。

列挙型の宣言と対応するマクロの作成

.h
typedef NS_ENUM(NSInteger, HogeType) {
    HogeType1,
    HogeType2,
    HogeType3
};

// HogeTyoeから文字列を取得
#define GetHogeTypeText(type) HogeTypeTextList[type]

// 文字列からHogeTyoeを取得
#define GetHogeType(typeText) (HogeType)[HogeTypeTextList indexOfObject:typeText]

// HogeTyoeの文字列リスト
#define HogeTypeTextList @[@"first",@"second",@"third"]

使用例

.m
    HogeType hogeType = HogeType1;

    // HogeTypeから文字列を取得
    NSString *hogeTypeText = GetHogeTypeText(hogeType);

    // 文字列からHogeTypeを取得
    HogeType getHogeType = GetHogeType(hogeTypeText);

    NSLog(@"HogeTypeの文字列 : %@",hogeTypeText);
    NSLog(@"文字列から取得したHogeType : %d",getHogeType);

もちろんENUMを切っている分でswichで使用する事もできるので、
項目を追加するときの漏れを防止できます。

.m
    NSString *hogeTypeText = @"first";

    // 文字列をHogeTyoeに変換
    HogeType hogeType = GetHogeType(hogeTypeText);

    // Switchで処理
    switch (hogeType) {
        case HogeType1:
        {
            break;
        }
        case HogeType2:
        {
            break;
        }
        case HogeType3:
        {
            break;
        }
    }

最後に…

今までは変換用のメソッドを共通クラス等で作成したのですが、
こちらの方がスマートで使いやすいと思います。

他にいい方法や、間違っている所があればコメント頂けると幸いです。

10
8
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
10
8