2011-07-12 71 views
0

如何枚举NSString?什么我试图做如何枚举NSString?

例如:

enum eCat{ 
    dog, 
    cat, 
    mouse, 
    bunny 
}; 
@interface 

@implementation 
.... 
enum eCat Cate; 
NSString *yoda = @"mouse"; 
Cate = [yoda intValue]; 
NSLog(@"Hello: %d",Cate); 

希望得到的结果是

Hello: 2 

感谢

回答

1

你必须自己创建一个映射(字符串→枚举)。一种可能性是这样的(免责声明:只有大脑编译):

#define CAT_(a, b) a##b 
#define CAT(a, b) CAT_(a, b) 
#define E(en) [NSNumber numberWithInt:en], CAT(@, #en), 
NSDictionary *mapping = [NSDictionary dictionaryWithObjectsAndKeys: 
          // ... 
          E(mouse) 
          E(bunny) 
          nil]; 

NSNumber *result = [mapping objectForKey:@"mouse"]; 
if (!result) { 
    // ... oops 
} else { 
    enum eCat cate = [result intValue]; 
} 
1

Objective-C中没有这种枚举的直接支持。

相反,创建一个字符串数组和寻找一个条目:

static NSArray* enumeration=nil; 
    if(!enumeration){ 
      enumeration=[[NSArray arrayWithObjects:@"AAA",@"BBB",@"CCC",nil] retain]; 
    } 

然后再使用它:

NSInteger i=[enumeration indexOfObject:@"BBB"]; 
    /* i is now 1 */ 

这无关你的问题,但请不要” t用大写字母开头,如Cate。这违背了Objective-C的惯例。