2015-04-27 3 views
4

Рассмотрим,NSLog - Как напечатать имя объекта?

NSString *myString = @"Welcome"; 

NSLog(@"%@",myString); 

напечатает Welcome в консоли.

Могу ли я напечатать строку как «myString: Welcome»?

Я имею в виду, могу ли я получить имя объекта («myString») вместе с значением объекта («Welcome»)?

+0

Вы можете сделать как .. NSLog (@ "myString:% @", myString); –

+0

Но он должен был напечатать свое имя переменной – ColdSteel

+0

@confused вы попробовали мой ответ. –

ответ

6

Используйте следующий код:

#define stringVariable(x) NSLog(@"%s:%@",#x, x) 

NSString *[email protected]"Welcome"; 

stringVariable(myString); 

Примечание: Общий принцип заключается в том, что когда вы положили # перед аргументом в теле #define, препроцессор заменяет его строка C точного выражения, переданного макросу. Когда вы передадите имя переменной, вы получите это имя.

+2

Это правильно, но я бы посоветовал использовать другое имя макроса. 'stringVariable' может конфликтовать с существующими именами переменных. А поскольку это макрос, это может вызвать сложные и не очевидные ошибки. Обычно для макросов используется all-uppercase. В сочетании с префиксом он должен быть более или менее безопасным. Что-то вроде 'CF_LOG_OBJECT_VARIABLE (x)'. Вам все равно не нужно вводить его. Viva la autocomplete :) – FreeNickname

+0

@FreeNickname Спасибо за предложение в следующий раз, конечно, я сделаю это. –

+0

@AshokLondhe Только для уточнения. Я попробовал вышеуказанный код и его работу. Но когда я пытаюсь сделать это, не определяя его как макрос, я попробовал «NSLog (@«% s:% @ », # myString, myString)», и он выдает сообщение об ошибке «Ожидаемое выражение». Есть идеи? – Confused