18

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

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

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

2 回答 2

22

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

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

于 2013-08-25T08:01:20.553 回答
10

不容易。枚举值的字符串标识符供开发人员使用,但在内部它只是一个具有特定类型的值(在您的示例中为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;
}

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

于 2013-02-01T17:35:05.803 回答