我如何枚举NSString?

时间:2011-07-12 04:37:33

标签: objective-c cocoa-touch

如何枚举NSString?

我想要做的例子:

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

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

希望结果是

Hello: 2

感谢

2 个答案:

答案 0 :(得分: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 */

这与您的问题无关,但请不要使用大写字母启动变量名称,例如Cate。这违反了Objective-C的惯例。

答案 1 :(得分: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];
}
相关问题