I/p:- "ImageWideNice".scan(/[A-Z][a-z]+/).join(",")
O/p:- "Image,Wide,Nice"
Вместо того, чтобы использовать массив, почему бы не использовать словарь; У вас есть цвет NSString в качестве ключей, и вы возвращаете любой NSNumber, который хотите. Что-то вроде; (Длинный текст для ясности.)
NSDictionary *carColourDictionary = @{@"Red": @1,
@"Blue": @2,
@"White": @3};
// Use the dictionary to get the number
// Assume you have a method that returns the car colour as a string:
// - (NSString *)colourAsString;
int carColour = carColourDictionary[object colourAsString];
Вы также можете поместить значения в массив.
NSArray *carColorsArray = @[@"red", @"blue", @"white"];
Затем вы можете использовать indexOfObject для получения индекса конкретной строки.
car_colors carColor = [carColorsArray indexOfObject:@"blue"] + 1;
Я нашел решение:
if ([car_color isEqualToString:@"1"])
return red;
if ([tipo_pdi isEqualToString:@"2"])
return blue;
if ([tipo_pdi isEqualToString:@"3"])
return white;
Но я не Мне не нравится стиль «если», а что, если бы у меня была тысяча цветов? Нет более автоматического решения?
вот реализация с использованием NSDictionary
и существующего перечисления
в файле .h:
typedef NS_ENUM(NSInteger, City) {
Toronto = 0,
Vancouver = 1
};
@interface NSString (EnumParser)
- (City)cityEnumFromString;
@end
в файле .m:
@implementation NSString (EnumParser)
- (City)cityEnumFromString{
NSDictionary<NSString*,NSNumber*> *cities = @{
@"Toronto": @(Toronto),
@"Vancouver": @(Vancouver),
};
return cities[self].integerValue;
}
@end
пример использования:
NSString *myCity = @"Vancouver";
City enumValue = [myCity cityEnumFromString];
NSLog(@"Expect 1, Actual %@", @(enumValue));
Здесь есть много отличных ответов: Преобразование между перечислением C и XML
Они в основном такие же, как у Abizern, но немного чище и проще в работе с, если ваше приложение часто выполняет это преобразование строки в перечисление. Существуют решения, которые объединяют определения строк и перечислений, а также способы сделать каждое преобразование отдельной, легко читаемой строкой кода.