Iphone 将NSString转换为常量的名称
我有一堆常量声明如下:Iphone 将NSString转换为常量的名称,iphone,xcode,nsstring,constants,Iphone,Xcode,Nsstring,Constants,我有一堆常量声明如下: #define kConstant0 @"Cow" #define kConstant1 @"Horse" #define kConstant2 @"Zebra" 在代码的其他地方,我试图通过向常量的字符串名称添加一个整数来提取常量值: int myInt = 1; // (Actual intValue Pulled From Elsewhere) myLabel.text = [@"kConstant" stringByAppendingString:[NSS
#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答案是避免用“定义”来定义常数。使用NSString
常量,如下所示:
NSString * const constant1 = @"Cow";
最大的好处是,现在常量有了一个类型,并且在类型安全方面要好得多。答案是避免使用#defines来定义常量。使用NSString
常量,如下所示:
NSString * const constant1 = @"Cow";
最大的好处是,现在常量有了一个类型,并且在类型安全性方面要好得多。您不能自动执行该操作。您必须将映射存储在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];
你不能自动完成。您必须将映射存储在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];
调试起来简单多了,而且更干净。请随意对答案投赞成票;-)。调试起来简单多了,而且更干净。请随意对答案投赞成票;-)。这就成功了,非常感谢。我正试图摆脱创建另一个数组的麻烦,因为我已经有了常量的名称,尽管是NSString形式的。非常感谢。我试图摆脱创建另一个数组的麻烦,因为我已经有了常量的名称,尽管是NSString形式。