Ios 如何设置全局变量取决于参数?

Ios 如何设置全局变量取决于参数?,ios,Ios,我有一些NSString全局变量 我可以这样设置: [[Globals sharedInstance] setColor1:@"red"]; [[Globals sharedInstance] setColor2:@"orange"]; 但我在一个函数中,有一个参数,代表数字1,2,3,等等。 我怎么能做那样的事 [[Globals sharedInstance] setColorMYPARAMETER:@"orange"]; 您可以使用NSSelectorFromString,基于方法名称

我有一些NSString全局变量

我可以这样设置:

[[Globals sharedInstance] setColor1:@"red"];
[[Globals sharedInstance] setColor2:@"orange"];
但我在一个函数中,有一个参数,代表数字1,2,3,等等。 我怎么能做那样的事

[[Globals sharedInstance] setColorMYPARAMETER:@"orange"];

您可以使用
NSSelectorFromString
,基于方法名称动态构造选择器:

int colorNum = ... ;
NSString * colorSelStr = [NSString stringWithFormat:@"setColor%d:", colorNum];
[[Globals sharedInstance] performSelector:NSSelectorFromString(colorSelStr) withObject:@"orange"];
这将创建一个看起来像您想要的方法名称的字符串,然后您要求共享全局对象使用来自该字符串的SEL“performSelector”,并将颜色字符串作为参数



然而,这可能表明您可以更好地设计原始代码。为什么有编号为0-n的全局变量?为什么不为所有全局颜色保留一个
NSArray
,然后通过索引访问它呢?

我很确定这是不可能的。但您可以尝试另一种方法在setColor StringLook正常后忘记冒号,但我有一个警告,performSelector可能会导致泄漏,因为它的选择器未知,我想这不重要“NSInvalidArgumentException”,原因:'-[Globals setColor3]:未识别的选择器发送到实例。因为我的全局变量NSString*color3确实存在谢谢@santhu,已修复。@ChHnsn:现在试试--我忘记了选择器名称末尾的冒号。
int colorNum = ... ;
NSString * colorSelStr = [NSString stringWithFormat:@"setColor%d:", colorNum];
[[Globals sharedInstance] performSelector:NSSelectorFromString(colorSelStr) withObject:@"orange"];