У меня есть строка, которую я хочу проанализировать и вернуть эквивалентное перечисление. Мне нужно использовать тип enum где-то еще, и мне нравится, как я его определяю. Проблема в том, что я не знаю хорошего способа сравнить строку со значениями перечисления без излишнего порядка перечислений.
Нет ли другого варианта, кроме большого if / else?
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];
}
В Python я бы, вероятно, сделал что-то вроде следующего, хотя, если честно, я тоже не влюблен в это.
## 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)
пс. Я знаю, что в Какао есть цветовые константы, это всего лишь пример.