有什么方法可以用预处理器替换部分字吗?

我的Objective-C类中有类似的东西

@interface PREFIX_MyClass { ... @end 

我想使用预处理器将其转换为:

 @interface AwesomeMyClass { ... @end 

所以像

 #define PREFIX_ Awesome 

不起作用,因为它是一个单词的一部分。 还有别的办法吗? 我知道我可以使用这样的东西:

 #define PrefixClass(NAME) Awesome##NAME @interface PrefixClass(MyClass) 

但我不喜欢这样,因为它打破了代码完成并在开发工具中引用了以下内容(即:在这种情况下为Xcode)

这不是很优雅,但您可以使用预处理器来替换整个类名而不仅仅是part。

 #define PREFIX_MyClass AwesomeMyClass @interface PREFIX_MyClass 

当然,如果您多次使用前缀并且它发生变化,这就成了一个问题。 你可以通过使用另一个调用另一个宏来添加前缀来解决这个问题,这样只有一个宏包含实际的前缀。

 #define ADD_PREFIX(name) Awesome##name #define PREFIX_MyClass ADD_PREFIX(MyClass) @interface PREFIX_MyClass 

对于您想要添加前缀的所有内容,仍然需要一个宏,但代码完成将识别PREFIX_MyClass名称。

这并不是您要求的,但它可能是实现目标的另一条途径。 Xcode允许您为项目定义类前缀。 在文件导航器中选择项目,然后在文件检查器(右侧边栏的第一个“选项卡”)中,您将拥有以下内容:

在此处输入图像描述

无论您在“类前缀”字段中输入的是什么文本,都会在您在该项目中创建的任何类的名称前加上。