工作备忘-ios中oc枚举值与字符串之间的转换
在工作中,枚举类型的使用优势没啥好说的。但经常需要将它与字串进行转换方便显示或其它需求。可惜原生的枚举值只能是int常量,并不支持字符串,我们只能自己对枚举值进行转换,一般有两种方案:
然后用 KGenderString(type) type 为枚举值,如传入KFemale ,KGenderString(KFemale) 返回的是字符串 -- 女, 即达到我们的目的,另外
方案1中,多是先声明,然后在实现文件里创建一个映射表。这样带来的问题就是要分两个文件来管理,带来管理不方便不好。使用前还在确保映射表已经初始化。显然使用时还是有些许难受。
如果全部改用宏来实现则会好管理很多,而且对于映射表可以采用惰性初始化原则,即只有访问到时才创建。这就是方案2,也是这篇博客的重点。
方法是:先在.h头文件中定义枚举:
- #ifndef _GENDER_H__
- #define _GENDER_H__
- // 性别
- typedef enum {
- /** 未知 */
- KUnKnow = 0,
- /** 男 */
- KMale = 1,
- /** 女 */
- KFemale = 2
- }Gender;
- #endif
- 接下来在需要用到枚举值的实现文件中写下宏定义:
- <pre name="code" class="objc">const NSArray *___Gender;
- // 创建初始化函数。等于用宏创建一个getter函数
- #define cGenderGet (___Gender == nil ? ___Gender = [[NSArray alloc] initWithObjects:\
- @"未知",\
- @"男",\
- @"女", nil nil] : ___Gender)
- // 枚举 to 字串
- #define KGenderString(type) ([cGenderGet objectAtIndex:type])
- // 字串 to 枚举
- #define KGenderEnum(string) ([cGenderGet indexOfObject:string])
然后用 KGenderString(type) type 为枚举值,如传入KFemale ,KGenderString(KFemale) 返回的是字符串 -- 女, 即达到我们的目的,另外
- <span style="font-family: Arial, Helvetica, sans-serif;">KGenderEnum(string)可以实现字符串转成枚举值.</span>

浙公网安备 33010602011771号