有没有办法在Xcode中重构混合的C++/Objective-C代码?我正在使用Cocos2D和Box2D编写游戏,而Box2D是用C++编写的,因此我编写的每个类都应该有.mm扩展名。因此,当我尝试重命名变量时,会收到诸如“Xcode只能重构C和Objective-C代码”之类的消息。
提前感谢!
提前感谢!
Xcode在重构方面非常有限,即使是普通的Obj-C也是如此。它基本上只能进行重命名,甚至不能在注释中重命名。如果它说它不能做某事,那么它可能就不能做。
唯一的重命名方法是使用查找和替换
。请注意,Xcode可以处理正则表达式,因此通常已经足够好用了。
当然,问题在于查找和替换不知道编程语言,有时会添加额外的替换或忘记替换某些内容,因此要格外小心。每次重构后都需要进行干净的构建以检查是否正确地重命名了所有内容。
您也可以使用命令行工具(例如sed
)来实现相同的功能。
我在构建cocos2d/box2d游戏时遇到了同样的问题。
事实1:Xcode 4可以重构C和Objective-C(.m文件)代码,但无法重构Objective-C++代码(.mm文件)。
事实2:如果要与box2d(用c++编写)交互,则需要使用Objective-C++。
我通过以下步骤部分解决了这个问题:
结果现在是,Xcode现在可以重构我的项目的每个类,除了包装器。
P.S. 当你需要在你的Objective-C类中使用一个包装器(例如MyWorld)时,你必须导入MyWorld.h而不是MyWorld.mm。
您可能想在Github上查看这个项目 - 它仍在进行中,但仍然很有价值:
https://github.com/lukhnos/refactorial
它是一个基于Clang(即Xcode本身所基于的编译器)的c++重构工具。
http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects
这个想法是你仍然无法重构.mm文件,但是你可以重构所有其他代码,即使它包括Objective-C++代码。