假设我在.h文件中声明了一个typedef:
typedef enum {
JSON,
XML,
Atom,
RSS
} FormatType;
Run Code Online (Sandbox Code Playgroud)
我想构建一个将typedef的数值转换为字符串的函数.例如,如果邮件[self toString:JSON]已发送; 它会返回'JSON'.
该函数看起来像这样:
-(NSString *) toString:(FormatType)formatType {
//need help here
return [];
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果我尝试这种语法
[self toString:FormatType.JSON];
Run Code Online (Sandbox Code Playgroud)
要将typedef值传递给方法,我收到一个错误.我错过了什么?
我正在挖掘枚举objc对象的方法,比如NSString,我记得在Xcode4 +版本中有一个新功能,它提供了一种新的枚举方式,但不清楚.有人知道吗?
在XML中存储枚举并再次读取它的最简洁方法是什么?说我有:
enum ETObjectType {ETNormalObjectType, ETRareObjectType, ETEssentialObjectType};
Run Code Online (Sandbox Code Playgroud)
......我想利用一个变量,enum ETObjectType objectType = ETNormalObjectType;并将其转换为XML,看起来像这样:<objectType>ETNormalObjectType</objectType>.
目前我正在做的是这样的:
NSString* const ETObjectTypeAsString[] = {@"ETNormalObjectType",@"ETRareObjectType",@"ETEssentialObjectType"};
[anXMLElement addChild:[NSXMLElement elementWithName:@"objectType" stringValue:ETObjectTypeAsString[objectType]]];
Run Code Online (Sandbox Code Playgroud)
......但这并不完全理想; 每次更改枚举时,我都不满意更新两个列表.但这是可以接受的.更糟糕的是读回XML,我目前正在这样做:
if ([[[anXMLElement childNamed:@"objectType"] stringValue] isEqualToString:@"ETRareObjectType"])
{
[self initObjectType:ETRareObjectType];
}
else if ([[[anXMLElement childNamed:@"objectType"] stringValue] isEqualToString:@"ETEssentialObjectType"])
{
[self initObjectType:ETEssentialObjectType];
}
else
{
[self initObjectType:ETNormalObjectType];
}
Run Code Online (Sandbox Code Playgroud)
呸!这让我很反感.必须有一种更清晰的方式来阅读,至少,或者可能是一种统一的读写方式?
我正在使用Obj-C和Cocoa,但我不介意一些纯C函数.我甚至会使用预处理器的东西,如果这是唯一的方法.