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

Hua*_*ang 17 enums objective-c

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

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

  DAYS d = MON;
  NSLog(@"%@", d);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

tom*_*tom 21

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

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


WDU*_*DUK 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;
}
Run Code Online (Sandbox Code Playgroud)

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