Нет, вы не можете сделать это. Как только ваш код скомпилирован, ваши переменные действительно не имеют имен - только местоположения. Имена, которые вы видите в отладчике, представлены символьным файлом, который отладчик использует для сопоставления местоположений с именами.
Ключевое значение кода может помочь, в зависимости от того, чего вы действительно пытаетесь достичь. С помощью 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.
Может вы, возможно, достигнете того, что хотите, используя «NSDictionary»? – Paulw11