打印枚举,NSLog的字符串表示形式

时间:2013-02-01 17:27:27

标签: objective-c enums

我正在尝试NSLog我的一些枚举。例如,这段代码打印枚举的整数表示,但我希望它输出实际的字符串名称,在本例中为MON。我怎么能这样做?

#import <Foundation/Foundation.h>
int main(void)
{
    typedef enum {
        SUN,
        MON,
        TUES
    } DAYS;

  DAYS d = MON;
  NSLog(@"%@", d);
  return 0;
}

2 个答案:

答案 0 :(得分:21)

LLDB调试器将显示字符串标识符。因此,您可以使用带有调试器命令操作的断点(在您的情况下为“p d”)而不是使用NSLog,并将断点设置为在评估后自动继续。

您可以通过右键单击蓝色标记来配置断点。

答案 1 :(得分:9)

不容易。枚举值的字符串标识符是针对开发人员的,但在内部它只是具有特定类型的值(在您的示例中为DAYS)。

您可以编写一个翻译方法,以返回枚举值的名称,例如

- (NSString*)nameForDay:(DAYS)day {
    switch (day) {
        case SUN:
            return @"SUN";
        break;
        case MON:
            return @"MON";
        break;
        case TUES:
            return @"TUES";
        break;
        default:
            return nil;
        break;
    };

    return nil;
}

这是一种令人讨厌的方式,因为它不能完全恢复枚举值的变化,但它是一种将字符串与枚举值相关联的方法。