原文轉自? http://www.rijiyuelei.me/2012/09/enum-and-string-conversion-in-objective-c/
在常見的方案中,多是先聲明,然后在實現文件里創建一個映射表。這樣帶來的問題就是要分兩個文件來管理,帶來管理不方便。使用前還要確保映射表已經初始化。顯然使用時還是有些許難受。如果全部改用宏來實現則會好管理很多,而且對于映射表可以采用懶加載的辦法。
typedef enum {
NETWORK_TYPE_NONE = 0,
NETWORK_TYPE_WIFI,
NETWORK_TYPE_3G,
NETWORK_TYPE_2G,
}NETWORK_TYPE;
const NSArray *___NetworkType;
// 創建初始化函數。等于用宏創建一個getter函數
#define NetworkTypeGet (___NetworkType == nil ? ___NetworkType = [[NSArray alloc] initWithObjects:\
@"NONE",\
@"WIFI",\
@"3G",\
@"2G", nil] : ___NetworkType)
// 枚舉 to 字串
#defineNetworkTypeString(type) ([NetworkTypeGet objectAtIndex:type])
// 字串 to 枚舉
#define NetworkTypeEnum(string) ([NetworkTypeGet indexOfObject:string])
這么寫的缺點是編譯的時候文件可能會大一點。