在c#中,您声明了一个枚举,并可以使用enumVariable.ToString("g")
打印它的文字
objective-c中的命令是做什么的
例如在c#中我可以写下以下内容:
class Sample
{
enum Colors {Red, Green, Blue, Yellow = 12};
public static void Main()
{
Colors myColor = Colors.Yellow;
Console.WriteLine("myColor.ToString(\"d\") = {0}", myColor.ToString("d"));
Console.WriteLine("myColor.ToString(\"g\") = {0}", myColor.ToString("g"));
}
}
// This example produces the following results:
// myColor.ToString("d") = 12
// myColor.ToString("g") = Yellow
我知道我可以创建一个字符串数组来保存值或者用switch case编写一个函数,但这似乎是一个适合于1970年编写的c语言的解决方案:)
如果你知道一个优雅的解决方案,请告诉我。
答案 0 :(得分:2)
当开发人员想要从枚举值接收字符串时,最常见的情况是使用它(字符串)作为复杂对象(XML,JSON,URL等)的值/键。
并不总是想要与枚举值完全相同的字符串。在Objective-C中,您应该使用映射。使用枚举中的键(包含在NSNumber中)和NSString类型的值创建NSDictionary。
// your enum
enum
{
kAPXStateOpened,
kAPXStateClosed,
kAPXStateUnknown
};
...
// static map
static NSDictionary *theStateMap = nil;
static dispatch_once_t theStateMapDispatch = 0;
dispatch_once(&theStateMapDispatch,
^{
theStateMap = [NSDictionary dictionaryWithObjectsAndKeys:
@"opened", [NSNumber numberWithInteger:kAPXStateOpened],
@"closed", [NSNumber numberWithInteger:kAPXStateClosed],
@"broken", [NSNumber numberWithInteger:kAPXStateUnknown],
nil];
});
self.currentState = kAPXStateOpened;
NSString *theStringValueFromState = [theStateMap objectForKey:[NSNumber numberWithInteger:self.currentState]];
NSLog(theStringValueFromState); // "opened"
答案 1 :(得分:0)
ObjC中的枚举是具有一组已定义值而不是对象的整数。因此,他们有方法。可能有一些C函数与枚举有关,但我不熟悉它们。 (如果有人知道的话会感兴趣的。)
因为枚举是整数,所以也可以将未定义的值放入使用枚举类型的变量中。
以下是一个例子:
typedef enum {
enumValueA,
enumValueB
} EnumName;
// Useful when you want to define specific values.
typedef enum {
enumX = 1,
enumY = 100
} AnotherEnum;
并在代码中:
EnumName x = enumValueA;
然而,这些也是有效的:
EnumName x = 0; // = enumValueA
EnumName x = 3; // Not defined in the enum.
因此,枚举基本上是一种为特定的整数值集使用英文名称的方法。
要从中获取字符串以包含在UI和日志记录中,您需要手动将枚举值映射到字符串。枚举值提供索引的字符串数组相对简单。
答案 2 :(得分:0)
int someInt = [NString stringWithFormat:@"%d",yourEnumVariable];