Ios 如何检索由NSString表示的命名对象?

Ios 如何检索由NSString表示的命名对象?,ios,objective-c,Ios,Objective C,我有一组NSString值,如下所示: self.dataArray = @[@"blue", @"orange", @"green", @"red", @"yellow"]; SEL myColor = NSSelectorFromString([NSString stringWithFormat:@"%@Color", self.colorString]); self.view.backgroundColor = [[UIColor class] performSelector:myCol

我有一组NSString值,如下所示:

self.dataArray = @[@"blue", @"orange", @"green", @"red", @"yellow"];
SEL myColor = NSSelectorFromString([NSString stringWithFormat:@"%@Color", self.colorString]);
self.view.backgroundColor = [[UIColor class] performSelector:myColor]
并且希望能够执行以下操作(在将上述颜色之一设置为self.colorString之后):


但显然不能这样做。可能的方法是什么?

尝试将数据与颜色关联到字典中:

UIColor *blue = [UIColor blueColor];
UIColor *red = [UIColor redColor];

NSDictionary *colors = @{@"blue" : blue, @"red" : red};

UITextField *pinga = [[UITextField alloc]init];

pinga.textColor = [colors objectForKey:@"red"];

一种几乎通用的方法:

NSDictionary *colors = @{
    @"red": [UIColor redColor],
    @"green": [UIColor greenColor],
    @"blue": [UIColor blueColor]
};

NSString *name = @"blue";
UIColor *c = colors[name];
NSString *selName = [NSString stringWithFormat:@"%@Color", name];
SEL sel = NSSelectorFromString(selName);
UIColor *color = [[UIColor class] performSelector:sel];
真正的通用方式:

NSDictionary *colors = @{
    @"red": [UIColor redColor],
    @"green": [UIColor greenColor],
    @"blue": [UIColor blueColor]
};

NSString *name = @"blue";
UIColor *c = colors[name];
NSString *selName = [NSString stringWithFormat:@"%@Color", name];
SEL sel = NSSelectorFromString(selName);
UIColor *color = [[UIColor class] performSelector:sel];

您可以尝试以下方法:

self.dataArray = @[@"blue", @"orange", @"green", @"red", @"yellow"];
SEL myColor = NSSelectorFromString([NSString stringWithFormat:@"%@Color", self.colorString]);
self.view.backgroundColor = [[UIColor class] performSelector:myColor]

那么,您将如何将名称转换为索引?这并没有回答问题。@H2CO3谢谢你说得对,编辑了我的答案以关联名称tnx@timpone不客气。请注意,如果您在编译时知道一组可能的颜色,则首选dictionary方法而不是runtime“hackage”方法。有时,转述自己的问题会立即发现一个解决方案:
-(UIColor*)colorWithName:(NSString*)name{/*明显的*/}
;)可能重复的