2013-07-25 1 views
1

Есть ли способ задать указатель/переменную для ее имени в виде строки?Objective-C >> Есть ли способ получить указатель/переменное имя как NSString?

... т.е.

NSNumber* aNumber; 
int anInt; 

NSString* name = aFunctionThatDoesWhatIAskedFor(aNumber); 
NSLog(@"%@",name); //should print "aNumber"; 

name = aFunctionThatDoesWhatIAskedFor(anInt); 
NSLog(@"%@",name); //should print "anInt"; 

ответ

3

определить этот макрос

#define nameOfVariable(x) NSLog(@"%s",#x) 

использовать этот макрос

nameOfVariable(aNumber); 
nameOfVariable(anInt); 

Объяснение:

Предшествующая имя параметра на # известен как Stringification. Вы можете использовать оператор «#», чтобы укрепить аргумент переменной или вставить его токен с другим токеном.

Иногда вы можете преобразовать аргумент макроса в строку константу. Параметры не заменяются внутри строковых констант, но вы, , можете использовать #' preprocessing operator instead. When a macro parameter is used with a leading # ', препроцессор заменяет его литералом фактического аргумента, преобразованного в константу строки. В отличие от замены нормального параметра, аргумент не с макросъемкой. Это называется stringification.

+0

# имеет особое значение при использовании в макросе. # означает котировку следующего токена (который должен быть именем макропараметра). ваш макрос такой же, как NSLog (@ "% s", "aNumber"); –

0

В большинстве языков программирования объекты не имеют имен.