工作备忘-ios中oc枚举值与字符串之间的转换

在工作中,枚举类型的使用优势没啥好说的。但经常需要将它与字串进行转换方便显示或其它需求。可惜原生的枚举值只能是int常量,并不支持字符串,我们只能自己对枚举值进行转换,一般有两种方案:

方案1中,多是先声明,然后在实现文件里创建一个映射表。这样带来的问题就是要分两个文件来管理,带来管理不方便不好。使用前还在确保映射表已经初始化。显然使用时还是有些许难受。

如果全部改用宏来实现则会好管理很多,而且对于映射表可以采用惰性初始化原则,即只有访问到时才创建。这就是方案2,也是这篇博客的重点。

方法是:先在.h头文件中定义枚举:

 

[objc] view plain copy
  1. #ifndef _GENDER_H__  
  2. #define _GENDER_H__  
  3. // 性别  
  4. typedef enum {  
  5.     /** 未知 */  
  6.     KUnKnow = 0,  
  7.     /** 男 */  
  8.     KMale = 1,  
  9.     /** 女 */  
  10.     KFemale = 2  
  11. }Gender;  
  12. #endif  
[objc] view plain copy
  1. 接下来在需要用到枚举值的实现文件中写下宏定义:  
[objc] view plain copy
  1. <pre name="code" class="objc">const NSArray *___Gender;  
  2. // 创建初始化函数。等于用宏创建一个getter函数  
  3. #define cGenderGet (___Gender == nil ? ___Gender = [[NSArray alloc] initWithObjects:\  
  4. @"未知",\  
  5. @"男",\  
  6. @"女", nil nil] : ___Gender)  
  7. // 枚举 to 字串  
  8. #define KGenderString(type) ([cGenderGet objectAtIndex:type])  
  9. // 字串 to 枚举  
  10. #define KGenderEnum(string) ([cGenderGet indexOfObject:string])  

然后用 KGenderString(type) type 为枚举值,如传入KFemale ,KGenderString(KFemale) 返回的是字符串 -- 女, 即达到我们的目的,另外

[objc] view plain copy
  1. <span style="font-family: Arial, Helvetica, sans-serif;">KGenderEnum(string)可以实现字符串转成枚举值.</span>  


 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jaccty/article/details/49280569
posted @ 2018-06-17 19:05  sundaysios  阅读(1144)  评论(0)    收藏  举报