原文轉(zhuǎn)自? http://www.rijiyuelei.me/2012/09/enum-and-string-conversion-in-objective-c/
在常見的方案中诡渴,多是先聲明山卦,然后在實現(xiàn)文件里創(chuàng)建一個映射表媒吗。這樣帶來的問題就是要分兩個文件來管理速缆,帶來管理不方便努潘。使用前還要確保映射表已經(jīng)初始化。顯然使用時還是有些許難受掸犬。如果全部改用宏來實現(xiàn)則會好管理很多聋伦,而且對于映射表可以采用懶加載的辦法。
typedef enum {
NETWORK_TYPE_NONE = 0,
NETWORK_TYPE_WIFI,
NETWORK_TYPE_3G,
NETWORK_TYPE_2G,
}NETWORK_TYPE;
const NSArray *___NetworkType;
// 創(chuàng)建初始化函數(shù)蛉拙。等于用宏創(chuàng)建一個getter函數(shù)
#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])
這么寫的缺點是編譯的時候文件可能會大一點尸闸。