变更记录
序号 | 录入时间 | 录入人 | 备注 |
---|---|---|---|
1 | 2017-06-16 | Alfred Jiang | - |
方案名称
语法 - Objective-C 中实现枚举类型(Enum)与字符串(NSString)互相转换
关键字
语法 \ 枚举类型 \ Enum \ 字符串 \ NSString \ 转换 \ 转化
需求场景
- 需要在 Objective-C 中支持枚举类型与字符串转换时
参考链接
详细内容
宏定义
#pragma mark - Enum Factory Macros
// expansion macro for enum value definition
#define ENUM_VALUE(name,assign) name assign,
// expansion macro for enum to string conversion
#define ENUM_CASE(name,assign) case name: return @#name;
// expansion macro for string to enum conversion
#define ENUM_STRCMP(name,assign) if ([string isEqualToString:@#name]) return name;
/// declare the access function and define enum values
#define DECLARE_ENUM(EnumType,ENUM_DEF) \
typedef enum EnumType { \
ENUM_DEF(ENUM_VALUE) \
}EnumType; \
NSString *NSStringFrom##EnumType(EnumType value); \
EnumType EnumType##FromNSString(NSString *string); \
// Define Functions
#define DEFINE_ENUM(EnumType, ENUM_DEF) \
NSString *NSStringFrom##EnumType(EnumType value) \
{ \
switch(value) \
{ \
ENUM_DEF(ENUM_CASE) \
default: return @""; \
} \
} \
EnumType EnumType##FromNSString(NSString *string) \
{ \
ENUM_DEF(ENUM_STRCMP) \
return (EnumType)0; \
}
使用说明
1)设置枚举初始值
#define TEST_STATUS(XX) \
XX(kTestStatusOK, = 0) \
XX(kTestStatusCached, )\
XX(kTestStatusRetry, )
2)声明枚举和字符串转换函数
DECLARE_ENUM(TestStatus, TEST_STATUS)
3)定义枚举类型和字符串转换函数
DEFINE_ENUM(TestStatus, TEST_STATUS)
4)使用枚举类型和字符串转换函数
NSString *testStatus = NSStringFromTestStatus(kTestStatusOK);
TestStatus statusFromString = TestStatusFromNSString(@"kTestStatusCached");
效果图
(无)
备注
(无)