Расширение макроса внутри NSString - PullRequest
0 голосов
/ 16 октября 2011

Как я могу развернуть макрос внутри NSString?У меня есть следующий код:

#define MAX_MESSAGE_LENGTH 2000

NSString *alertTxt = @"Your message exceeded MAX_MESSAGE_LENGTH characters";

Как вы можете предсказать, я получаю «Ваше сообщение превысило символы MAX_MESSAGE_LENGTH» вместо «Ваше сообщение превысило 2000 символов».Есть ли способ расширить мой MAX_MESSAGE_LENGTH в строке?

Ответы [ 2 ]

8 голосов
/ 16 октября 2011

NSStrings работает как строки C.Т.е. вы можете объединить строковые константы, написав их рядом друг с другом.

/* nested macro to get the value of the macro, not the macro name */
#define MACRO_VALUE_TO_STRING_( m ) #m
#define MACRO_VALUE_TO_STRING( m ) MACRO_VALUE_TO_STRING_( m )

#define MAX_MESSAGE_LENGTH 2000
NSString *alertTxt = @"Your message exceeded "
                      MACRO_VALUE_TO_STRING(MAX_MESSAGE_LENGTH)
                      " characters";
1 голос
/ 16 октября 2011

Вы можете использовать stringWithFormat: так:

NSString *alertTxt = [NSString stringWithFormat:@"Your message exceeded %i characters", MAX_MESSAGE_LENGTH];

При этом используются те же заполнители %@, %i и т. Д., Что и в NSLog.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...