Is there a concise way to map a string to an enum in Objective-C?

Posted by zekel on Stack Overflow See other posts from Stack Overflow or by zekel
Published on 2010-05-17T22:27:28Z Indexed on 2010/05/17 22:30 UTC
Read the original article Hit count: 145

Filed under:
|
|

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.

© Stack Overflow or respective owner

Related posts about objective-c

Related posts about cocoa