Распечатка строки представления перечисления, NSLog
Я пытаюсь NSLog некоторые перечисления, которые у меня есть. Например, этот фрагмент кода печатает целочисленное представление перечисления, но я хочу, чтобы он выводил фактическое имя строки, в этом случае MON. Как я могу это сделать?
#import <Foundation/Foundation.h>
int main(void)
{
typedef enum {
SUN,
MON,
TUES
} DAYS;
DAYS d = MON;
NSLog(@"%@", d);
return 0;
}
Ответы
Ответ 1
Отладчик LLDB отобразит строковые идентификаторы. Поэтому вместо использования NSLog вы можете использовать контрольную точку с действием команды отладчика ( "p d" в вашем случае) и установить, чтобы точка останова автоматически продолжалась после оценки.
Вы можете настроить точку останова, щелкнув правой кнопкой мыши на синем маркере.
Ответ 2
Не легко. Идентификатор строки для значения enum для разработчика, но внутренне это просто значение с определенным типом (в вашем примере, DAYS
).
Вы можете написать метод перевода, чтобы вернуть имя значения enum, например
- (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;
}
Это неприятный способ сделать это, поскольку он не полностью устойчив к изменениям перечисления, но его способ связать строку с значением перечисления.