Подтвердить что ты не робот

Распечатка строки представления перечисления, NSLog

Я пытаюсь NSLog некоторые перечисления, которые у меня есть. Например, этот фрагмент кода печатает целочисленное представление перечисления, но я хочу, чтобы он выводил фактическое имя строки, в этом случае MON. Как я могу это сделать?

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

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

Ответ 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;
}

Это неприятный способ сделать это, поскольку он не полностью устойчив к изменениям перечисления, но его способ связать строку с значением перечисления.