gpt4 book ai didi

objective-c - Objective-C 中是否有一种简洁的方法将字符串映射到枚举?

转载 作者:行者123 更新时间:2023-12-03 17:36:54 26 4
gpt4 key购买 nike

我有一个想要解析并返回等效枚举的字符串。我需要在其他地方使用枚举类型,并且我想我喜欢我定义它的方式。问题是我不知道有什么好方法可以根据枚举值检查字符串而不会对枚举的顺序造成冗余。

除了一个大的 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)

ps。我知道Cocoa中有颜色常量,这只是一个例子。

最佳答案

试试这个:Map enum to char array

伪代码..未经测试。

int lookup(const char* str) {
for(name = one; name < NUMBER_OF_INPUTS; name++) {
if(strcmp(str, stats[name]) == 0) return name;
}
return -1;
}

更客观的代码版本可能是:

// build dictionary
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
for(i=0; i<number_of_strings; i++) {
[dict setObject:[NSNumber numberWithInteger:i] forKey:[NSString stringWithUTF8String:names[i]]];
}

// elsewhere... lookup in dictionary
id obj = [dict objectForKey:name];
if(obj) return [obj intValue];
return -1;

关于objective-c - Objective-C 中是否有一种简洁的方法将字符串映射到枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com