将字符串转换为枚举类型

时间:2009-03-27 04:29:19

标签: iphone objective-c cocoa-touch

有没有人知道如何(或者如果)你可以在objective-c / cocoa / iphone环境中将字符串转换为枚举类型?

例如:

如果我有一个带有元素的XML文档:

<dog breed="GermanShepard">

我希望能够将“breed”属性读入NSString,然后将其转换为此处定义的“Dogs”类型:

typedef enum 
{   
Poodle,
GoldenRetriever,
GermanShepard,
Collie
} Dogs;

Dogs myDog = <string that came from the breed attr in the XML>

感谢任何帮助...

另外,我只想澄清一下,我能够从XML中检索attr值(这非常简单)。但是,我的问题是,一旦我有一个NSString,我无法将其转换为枚举类型(即示例中的Dog类型)。我只是将上面的XML示例作为一种方式来说明我为什么要做这样的事情。

5 个答案:

答案 0 :(得分:3)

没有办法开箱即用。您需要创建一个表,允许您在运行时将字符串与适当的整数值相关联。

答案 1 :(得分:2)

我很确定枚举值在编译时被整数替换,所以你要么必须单独测试与字符串的匹配,要么有一个你调用的枚举值数组indexOfObject:上。

答案 2 :(得分:1)

有一个类似的问题被问到here,我认为在那里给出的许多基于Cocoa的通用答案可能对你的情况有用。

答案 3 :(得分:1)

你必须将枚举值放入NSDictionary:

 NSDictionary *dogs = [NSDictionary dictionaryWithObjectsAndKeys:
                          [NSNumber numberWithInt:Poodle], @"Poodle",
                          [NSNumber numberWithInt:GoldenRetriever],   @"GoldenRetriever",
                          //.....
                          //.....
                          nil];

在收集解析值时解析类的某个地方将其放入另一个NSDictionary

 dictOfParsedData = [NSDictionary dictionaryWithObjectsAndKeys:
                     //.....
                     //.....
                     [dogs valueForKey:[attributeDict objectForKey:@"breed"]], @"breed",
                     //.....
                     nil];

返回枚举类型元素的方法

-(NSInteger)valForGlobalKey:(NSString *)_key andSubKey:(NSString *)_key2{    
    return [[[dictOfParsedData valueForKey:_key] valueForKey:_key2] intValue];
}

课堂上某个包含狗的地方

#import "ParsingClass.h" 
@interface ClassOfDogs : NSObject

实现:

ParsingClass *parsingClassInst = [[ParsingClass alloc] initWithXMLFile:@"Dogs.xml"];    
Dogs myDog = [parsingClassInst valForGlobalKey:@"dog" andSubKey:@"breed"];

答案 4 :(得分:0)

如果使用NSXMLParser,则它将包含在传递给parser:didStartElement:namespaceURI:qualifiedName:attributes:委托方法的xml属性中。当它被调用dog元素时。

属性保存在以属性名称为键的NSArray中。在你的情况下“品种”。因此,您使用以下方法访问包含狗名称的字符串:

NSString* breedName = [attributesDictionary objectForKey:@"breed"];

然后你有一个字符串,你可以比较(使用NSString的比较)你的狗名。

你可以通过制作你自己的NSNismentation of NSNumbers来获得更简洁的代码,其中包含由文本dognames键入的枚举值。