Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将NSString转换为常量的名称_Iphone_Xcode_Nsstring_Constants - Fatal编程技术网

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形式。