2011-10-16 66 views
0

如何扩展NSString内部的宏?我有以下代码:NSString内部的宏扩展

#define MAX_MESSAGE_LENGTH 2000 

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

正如你可以预测我收到“您的邮件超过MAX_MESSAGE_LENGTH字符”,而不是“您的邮件超过2000个字符”。 有没有办法让我的MAX_MESSAGE_LENGTH在字符串中展开?

+0

有很多可能会起作用的C模式宏编码技术,但是Joe的方法更直接,更不易出错。 –

+0

没错。我只是想知道宏观扩张。 – dmitry747

回答

8

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"; 
+0

不错,我不知道。 – JoePasq

+0

好,不幸的是,它会截断包含//的字符串,因为某些原因,就像在URL中一样 - 可能将其余的解析为C注释 –

+0

是的,我认为您需要将该宏定义为带引号的字符串,然后跳过使用'MACRO_VALUE_TO_STRING'。 – Mats

1

您可以使用stringWithFormat:这样的:

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

中采用相同的占位符%@%i等为NSLog的。

+0

你假设一个宏数值为 –