2014-10-29 35 views
5

我们有一个类WayPoint。但是在某个时候,我们决定将该课程重新命名为Placemark。但是,我们并不是真的想要更改类的名称,因为它会导致现有代码的很多修改。因此,我在头文件的底部添加了一行typedef,并从此开始在任何新代码中开始使用Placemark在Objective-C中重新定义为另一种符号

@interface WayPoint : _WayPoint 
@end 
typedef WayPoint Placemark; 

但仍有一件事我不明白。如果我尝试在其他头文件中使用前向定义。我只能用:

@class WayPoint; 

如果我使用:

@class Placemark; 

我会得到错误信息:

重新定义 '地标' 作为不同意义的符号

为什么?

+1

有趣的问题,我的答案提供了替代品,因为是机器人不回答这个问题。我有一些猜测,但我不一定会在这里发布。我很好奇低层次的细节。 – 2014-10-29 14:42:37

回答

6

不知道为什么你不能使用Xcode的重构功能(简单重命名是否快速简单)。但如果你真的想这样做,你可以使用更好的东西那么的typedef:

@compatibility_alias Placemark WayPoint 
+1

原因是这个类是由Core Data自动生成的。我不确定重构它是否安全。但好点。我会看看这个。 – 2014-10-29 15:05:15

+1

@YuchenZhong你可以猜测它甚至会更新entitiy设置中的类。快速搜索提供:http://stackoverflow.com/a/1359960/1032151 – 2014-10-29 15:10:19

5

由于typedef地标是一个别名,您试图将其用作类 符号。

所以错误清楚地表明 重新定义“地标”为不同类型的符号 的,这意味着你的类名和别名类型定义是不同的符号。

+0

typedef WayPoint Placemark;不是一个对象,它只是WayPoint的别名。 – 2014-10-29 14:35:02

+0

已经更正了谢谢 – 2014-10-29 14:36:54