2011-07-12 73 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的慣例。