有没有人知道如何(或者如果)你可以在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示例作为一种方式来说明我为什么要做这样的事情。
答案 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键入的枚举值。