Нет реального хорошего способа сделать это.Очень простой способ - создать массив:
NSString *const ENUM_NAMES[] = {
@"List", @"Details", @"PurchaseVolume", ...
};
Существуют альтернативы, в которых используются макросы и некоторые простые приемы препроцессора для определения имен и самого перечисления из одного и того же источника.Однако результирующий код труднее читать.
// some_enum.def
X(List),
X(Details),
X(PurchaseVolume)
// some_enum.h
enum {
#define X(x) x
#include "some_enum.def"
#undef X
};
// some_enum.c
char const *const ENUM_STRING[] = {
#define X(x) #x
#include "some_enum.def"
#undef X
};
Я не уверен в лучшем способе генерации строки NSSt из препроцессора, можете ли вы просто вставить в нее @
или, еслилучше использовать (NSString *)CFSTR(x)
.
Когда мне нужен такой код, я пишу скрипт Python для генерации кода из текстового файла - он генерирует вывод GPerf для преобразования строк в enum, ион также генерирует код для преобразования enum в строку.Обычный старый С не делает отражения.