6

我正在尝试使用 NSLog 显示存储特定枚举值的值。在以下示例中,我试图将输出设为:5 represents month of May.

知道enum与 NSLog 一起使用的正确令牌是什么吗?我尝试使用 %i 和 %@,但两者都不起作用。

谢谢!

enum month {jan = 1, feb, march, apr, may, jun, jul, aug, sep, oct, nov, dec};
enum month amonth;
int x = 5;
amonth = x;
NSLog(@"%i represents month of %@", x,amonth);
4

1 回答 1

9

不幸的是,你所要求的是不可能的。枚举名称不会保留过去的编译(编译器可用的调试信息除外)。因此,除非您想 a) 在您的应用程序中提供调试信息,并且 b) 在您的应用程序中有效地编写一个使用嵌入式调试信息的调试器,否则它就无法工作。

此问题的典型解决方案是使用switch语句提供一个返回适当名称的函数。

NSString *monthName(enum month m) {
    switch (m) {
        case jan:
            return @"jan";
        case feb:
            return @"feb";
        ...
    }
    return @"unknown";
}

这种方法的一个好处是您可以本地化名称。

于 2012-08-17T20:06:24.477 回答