2015-07-24 3 views
2

Я хочу установить имя переменной в значение другой переменной, есть ли другие способы сделать это, потому что я не думаю, что это так.Xcode, ios, Устанавливает имя переменной в значение другой переменной?

NSString *myint = @"a"; 

NSString *([NSString stringWithFormat:@"%@", myint]) = @"something"; 

NSLog(@"%@", a); 
+0

Может вы, возможно, достигнете того, что хотите, используя «NSDictionary»? – Paulw11

ответ

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]); 
+0

Есть ли способ сделать это, используя целое число ???? – starwar15432

+0

Я верю, что если вы заменили @ ["значение переменной"] на @ (вставьте здесь целое число), все это будет работать, но с целыми числами. – James

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. 
Смежные вопросы