我有一堆常量声明如下:
#define kConstant0 @"Cow"
#define kConstant1 @"Horse"
#define kConstant2 @"Zebra"
在代码的其他地方我试图通过在常量的字符串名称中添加一个整数来提取常量值:
int myInt = 1; // (Actual intValue Pulled From Elsewhere)
myLabel.text = [@"kConstant" stringByAppendingString:[NSString stringWithFormat:@"%i",myInt]];
但当然这会回归:
myLabel.text = @"kConstant1";
当我希望它返回时:
myLabel.text = @"Horse";
我无法弄清楚如何将NSString @“kConstant1”转换为常量名称kConstant1。
感谢任何帮助。 LQ
答案 0 :(得分:4)
答案是避免#defines完全定义常量。改为使用这样的NSString
常量:
NSString * const constant1 = @"Cow";
最大的好处是,现在常量有一种类型,并且在类型安全方面要好得多。
答案 1 :(得分:2)
你不能自动完成。您必须将映射存储在NSDictionary中,例如
@implementation MyClass
static NSDictionary* constants;
+(void)initialize {
constants = [[NSDictionary alloc] initWithObjectsAndKeys:
@"kConstant0", @"Cow",
@"kConstant1", @"Horse", ...,
nil];
}
...
NSString* constantName = [kConstant stringByAppendingString:...];
myLabel.text = [constants objectForKey:constantName];
如果所有这些常量都是kConstantN
形式,那么最好只创建一个数组。
static NSString* kConstants[] = {@"Cow", @"Horse", @"Zebra", ...};
...
myLabel.text = kConstants[i];