所以,我有这个定义:
typedef enum {
red = 1,
blue = 2,
white = 3
} car_colors;
然后,我得到了一个 car_colors 类型的变量: car_colors myCar;
问题是,我在 NSString 中收到了汽车的颜色。它必须是 NSString,我无法更改它。如何将 NSString 类型转换为 car_colors 类型?
NSString *value = [[NSString alloc] initWithString:@"1"];
myCar = [value intValue]; // <-- doesn't work
有什么想法吗? 谢谢!
最佳答案
这是一个使用 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));
关于Objective-c:要枚举的 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/925991/