【发布时间】:2014-07-30 14:14:35
【问题描述】:
我有几个宏定义如下:
#define text @"play"
#define text_s @"stop"
#define text_f @"forward"
#define text_r @"rewind"
#define text_m @"mute"
我有一个NSArray 填充字符串,例如@""、@"_s"、@"_f"、@"_r"、@"_m"。
因此,在运行时,我想将此数组中的一个字符串与宏名称连接起来,例如,@"text"。
换句话说,我想通过将它(即“文本”)与@""、@"_s"、@"_f"、@"_r"、@"_m" 连接来根据条件获取相应的宏并得到对应的宏。
到目前为止我已经尝试过使用:
label.text = [NSString stringWithFormat:@"%@%@", text, [myArray objectAtIndex:<INDEX>]];
但这只会将字符串(例如,如果它是@“stop”)与宏文本连接起来 它会变成“playstop”。
我想要归档的是能够连接字符串(即前缀)并形成一个宏名称并相应地使用它。
例如:如果使用@"_s",我会得到宏text_s,如果使用@"_f",那么将使用宏text_f。
我该如何存档?如何在运行时将宏名称与字符串(即@"_s")连接起来?
【问题讨论】:
-
你不知道宏是如何工作的。这不是宏的工作方式。请了解宏是如何工作的。它们不会出现在您的编译代码中。
-
当你定义一个宏,比如
#define text @"play",编译器用@"play"替换每个对text宏的引用。您无法在运行时访问宏。 -
为什么真的需要使用宏?
-
@Unhelig 宏在运行时不存在,因此您无法调用它。您可以定义一个宏来返回另一个宏的名称 (
#define MACRO_NAME(x) #x),但您仍然不能在运行时调用它,因为在编译时宏被编译器替换。例如,MACRO_NAME(text)由编译器转换为"text"。请记住,宏不是运行时函数。 -
宏是用于compiler-time的,你的代码是用于runtime的。它们没有共同的集合。
标签: ios objective-c macros