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;
}
}
最後に…
今までは変換用のメソッドを共通クラス等で作成したのですが、
こちらの方がスマートで使いやすいと思います。
他にいい方法や、間違っている所があればコメント頂けると幸いです。