我想将一个变量的名称设置为另一个变量的值,是否有其他方法可以执行此操作,因为我认为这不是这样。
NSString *myint = @"a";
NSString *([NSString stringWithFormat:@"%@", myint]) = @"something";
NSLog(@"%@", a);
最佳答案
不,您不能这样做。 编译代码后,变量实际上就没有名称-只是位置。您在调试器中看到的名称由符号文件提供,调试器用于将位置映射到名称。
键值编码可以帮助,具体取决于您要真正实现的目标。使用KVC,就像使用字典一样,您可以使用键名来引用值而不是访问变量。例如,如果您有一个具有foo
和bar
属性的对象,则可以执行以下操作:
NSString *key = @"foo";
[myObject setValue:@(5) forKey:key];
您甚至可以覆盖
-setValue:forKey:
,以便它接受任何键并记住值(这正是字典的作用)。您可以使用stringification operator朝另一个方向(将变量设置为另一个变量的名称),但这有点麻烦,通常并不那么有用。简而言之,以#开头的宏参数将用作文字字符串,而不是被求值。因此,您将创建一个这样的宏:
#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.