如何在运行时不使用任何字符串连接将MACRO扩展为NSString?

Dav*_*tti 6 macros objective-c nsstring c-preprocessor

我定义了一个宏MYMACRO.注意:该值不是有效的NSString.

#define MYMACRO is
Run Code Online (Sandbox Code Playgroud)

NSString的声明中使用

@"This MYMACRO fun"
Run Code Online (Sandbox Code Playgroud)

但是,预处理器不会扩展宏.预处理的结果是

@"This MYMACRO fun"
Run Code Online (Sandbox Code Playgroud)

到目前为止我发现的最佳解决方案是扩展宏:

#define MYMACRO @"is"
@"This "MYMACRO@" fun"
Run Code Online (Sandbox Code Playgroud)

宏扩展如下,这是一个有效的Objective-C语法:

@"This "@"is"@" fun"
Run Code Online (Sandbox Code Playgroud)

但是,这需要在运行时进行2次串联.

所以我的问题是如何在运行时不使用任何字符串连接的情况下插入宏实例NSString?

理想情况下,我希望运行时执行@"This is fun"而不是@"This "@"is"@" fun"

Jos*_*erg 6

我很确定你所拥有的已经在编译时连接,而不是运行时.