I didn't like putting the enum on the heap, without providing a heap function for translation. Here's what I came up with:
typedef enum {value1, value2, value3} myValue;
#define myValueString(enum) [@[@"value1",@"value2",@"value3"] objectAtIndex:enum]
This keeps the enum and string declarations close together for easy updating when needed.
Now, anywhere in the code, you can use the enum/macro like this:
myValue aVal = value2;
NSLog(@"The enum value is '%@'.", myValueString(aVal));
outputs: The enum value is 'value2'.
To guarantee the element indexes, you can always explicitly declare the start(or all) enum values.
enum {value1=0, value2=1, value3=2};
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…