我想将变量的名称设置为另一个变量的值是否还有其他方法可以执行此操作,因为我不认为这是方法。
NSString *myint = @"a";
NSString *([NSString stringWithFormat:@"%@", myint]) = @"something";
NSLog(@"%@", a);
答案 0 :(得分:1)
不,你不能这样做。编译代码后,你的变量实际上没有名字 - 只是位置。您在调试器中看到的名称由符号文件提供,调试器使用该符号文件将位置映射到名称。
键值编码可以提供帮助,具体取决于您真正想要实现的目标。使用KVC,您可以使用键名来引用值而不是访问变量,就像使用字典一样。例如,如果您有一个包含属性foo
和bar
的对象,则可以执行以下操作:
NSString *key = @"foo";
[myObject setValue:@(5) forKey:key];
您甚至可以覆盖-setValue:forKey:
,以便它接受任何键并记住该值(这正是字典的作用)。
您可以使用stringification operator向另一个方向(将变量设置为另一个变量的名称),但它有点hacky并且通常不是那么有用。简而言之,前缀为#的宏参数用作文字字符串而不是被评估。所以你要创建一个像这样的宏:
#define string(x) #x
然后你会在代码中的某处使用它:
int foo = 5;
NSLog("The name of the variable is %s and its value is %d.", string(foo), foo);
具有以下结果:
The name of the variable is foo and its value is 5.
答案 1 :(得分:0)
我同意Paulw11。您可以定义NSMutableDictionary以按键保存所有变量。我不认为编译器可以使用在运行时确定的句柄。但是你可以达到同样的效果。
所以说,例如,变量句柄和值都是NSString
,那么你可以这样做。
NSMutableDictionary *myObjects = [[NSMutableDictionary dictionary] init];
NSString variableName = @"myString";
[myObjects setObject @"Variable value" forKey: variableName];
NSLog("Variable %@ has value %@.", variableName, [myObjects objectForKey: variableName]);