Is there a concise way to map a string to an enum in Objective-C?
- by zekel
I have a string I want to parse and return an equivalent enum. I need to use the enum type elsewhere, and I think I like how I'm defining the class. The problem is that I don't know a good way to check the string against the enum values without being redundant about the order of the enums.
typedef enum {
    ZZColorRed,
    ZZColorGreen,
    ZZColorBlue,
} ZZColorType;
- (ZZColorType)parseColor:(NSString *)inputString {
    // inputString will be @"red", @"green", or @"blue" (trust me)
    // how can I turn that into ZZColorRed, etc. without
    // redefining their order like this?
    NSArray *colors = [NSArray arrayWithObjects:@"red", @"green", @"blue", nil];
    return [colors indexOfObject:inputString];
}
In Python, I'd probably do something like the following, although to be honest I'm not in love with that either.
## maps  url text -> constant string
RED_CONSTANT = 1
BLUE_CONSTANT = 2
GREEN_CONSTANT = 3
TYPES = {
    'red': RED_CONSTANT,
    'green': GREEN_CONSTANT,
    'blue': BLUE_CONSTANT,
}
def parseColor(inputString):
    return TYPES.get(inputString)
ps. I know there are color constants in Cocoa, this is just an example.