原文转自 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])
这么写的缺点是编译的时候文件可能会大一点。
网友评论