相关疑难解决方法(0)

将objective-c typedef转换为其等效字符串

假设我在.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值传递给方法,我收到一个错误.我错过了什么?

c enums typedef objective-c

138
推荐指数
9
解决办法
12万
查看次数

枚举NSString的最佳方法

我正在挖掘枚举objc对象的方法,比如NSString,我记得在Xcode4 +版本中有一个新功能,它提供了一种新的枚举方式,但不清楚.有人知道吗?

xcode enums ios

17
推荐指数
5
解决办法
4万
查看次数

在C enum和XML之间转换

在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函数.我甚至会使用预处理器的东西,如果这是唯一的方法.

c xml cocoa enums objective-c

4
推荐指数
3
解决办法
6882
查看次数

标签 统计

enums ×3

c ×2

objective-c ×2

cocoa ×1

ios ×1

typedef ×1

xcode ×1

xml ×1