Objective-c:要枚举的 NSString

标签 objective-c cocoa enums

所以,我有这个定义:

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/

相关文章:

c# - 改变枚举的数量是一个重大变化吗?

C++ 在结构构造函数中设置枚举字段时遇到问题

ios - 从 NSDictionary Swift 设置枚举

objective-c - 困惑如何实现 cocoa 应用程序的 View Controller

objective-c - 在 Cocoa 中获取 "the next 7am that will occur"的 NSDate 表示的最简单方法?

ios - iOS8 中的应用内购买收据验证

iphone - 如何像sqlite一样将整数值保存到NSuserDefault?

ios - 如何使 MKMap 适合指定的 View 区域?

objective-c - block 和幻象 block 参数交换的奇怪崩溃

ios - 如何在 Xcode 中制作跟随手指位置的左/右转场