objective-c - 如何在 ObjectiveC (2.0) 中声明枚举值已弃用

标签 objective-c enums deprecated

假设很久以前,我创建了以下枚举:

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricSquare,
   GeometricRectangle,
   GeometricCircle
}GeometricFigures;

我不久前在我的很棒的引擎中介绍了它们,现在我终于决定人们不应该再使用GeometricSquare,因为GeometricRectangle 已经。

首先,我可能会将我的枚举更改为如下所示:

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricRectangle,
   GeometricSquare = GeometricRectangle,
   GeometricCircle
}GeometricFigures;

这肯定会让我的很棒的引擎向后兼容,但另一方面会增加遗留垃圾。因此,我想在可预见的将来完全删除 GeometricSquare。为了让我的引擎用户明白这一点,我想将 GeometricSquare 标记为已弃用。

我的目标是文档 (doxygen) 以及代码完成 (Xcode) 和最后但并非最不重要的编译器 (GCC) 将让用户明白 GeometricSquare 不应该不再使用并已被 GeometricRectangle 取代。

对于文档,我会简单地使用 @deprecated 关键字;

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricRectangle,
   ///@deprecated Has been replaced by GeometricRectangle
   GeometricSquare = GeometricRectangle,
   GeometricCircle
}GeometricFigures;

但是 Xcode 和 GCC 呢?

不幸的是,通常的 GCC(方法)属性似乎无法完成这项工作。按照下面起草的方式添加 __attribute__((deprecated)) 会导致语法错误。

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricRectangle,
   GeometricSquare = GeometricRectangle __attribute__((deprecated)),

Parse Issue Expected }

   GeometricCircle
}GeometricFigures;

很明显,要么完全不起作用,要么我只是用错了。

最佳答案

我认为您将 __attribute__ 位附加到赋值运算符的错误一侧。这似乎工作正常:

typedef enum
{
   GeometricPoint,
   GeometricLine,
   GeometricRectangle,
   GeometricSquare __attribute__((deprecated)) = GeometricRectangle,
   GeometricCircle
}GeometricFigures;

现在分配 GeometricSquare 会给出编译器警告:

int fig = GeometricSquare;    //'GeometricSquare' is deprecated

关于objective-c - 如何在 ObjectiveC (2.0) 中声明枚举值已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165920/

相关文章:

objective-c - 使用辅助功能 API 在 Mac OS X 上移动其他窗口

Objective-C 命令行参数以 < 开头

iphone - 尝试在我的应用程序中实现网络错误警报?

ios - 无法使用 NSKeyedArchiver 保存我的模型

javascript - 不推荐使用 mozImageSmoothingEnabled

iphone - Cocoa Touch UI 对象可以序列化、通过网络传输并在客户端上重构吗?

json - 为没有字段的 Java 枚举创建读/写

java - 为什么 JMockIt 在这段代码中模拟 X 类的 getter X.getE() ?

java - 弃用的编译错误

c++ - 为什么不能使用 [[deprecated]] 弃用模板?