在objective-c中的Enum.ToString(“g”)

时间:2013-02-27 12:25:21

标签: c# objective-c enums

在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语言的解决方案:)

如果你知道一个优雅的解决方案,请告诉我。

3 个答案:

答案 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];