我不认为我从根本上理解枚举是什么,以及什么时候使用它。
例如:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
这里真正声明的是什么?
我不认为我从根本上理解枚举是什么,以及什么时候使用它。
例如:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
这里真正声明的是什么?
当前回答
从Xcode 4.4开始,苹果就建议这样定义枚举:
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
它们还提供了一个方便的宏NS_ENUM:
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
这些定义提供了更强的类型检查和更好的代码补全。我找不到NS_ENUM的官方文档,但你可以在这里观看WWDC 2012会议的“Modern Objective-C”视频。
更新 官方文件的链接在这里。
其他回答
64位更改的更新: 根据苹果关于64位变化的文档,
枚举也是类型化的:在LLVM编译器中,枚举类型可以 定义枚举的大小。这意味着一些枚举 类型的大小也可能比您期望的要大。的 和其他情况一样,解是对a不做任何假设 数据类型的大小。相反,将任何枚举值赋给变量 使用适当的数据类型
因此,如果您支持64位,则必须创建具有以下语法类型的enum。
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
or
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
否则,它将导致警告隐式转换丢失整型精度:NSUInteger (aka 'unsigned long')到ShapeType
swift编程更新:
在swift中,有一个语法变化。
enum ControlButtonID: NSUInteger {
case kCircle , kRectangle, kOblateSpheroid
}
从Xcode 4.4开始,苹果就建议这样定义枚举:
typedef enum ShapeType : NSUInteger {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
它们还提供了一个方便的宏NS_ENUM:
typedef NS_ENUM(NSUInteger, ShapeType) {
kCircle,
kRectangle,
kOblateSpheroid
};
这些定义提供了更强的类型检查和更好的代码补全。我找不到NS_ENUM的官方文档,但你可以在这里观看WWDC 2012会议的“Modern Objective-C”视频。
更新 官方文件的链接在这里。
typedef允许程序员将一种Objective-C类型定义为另一种。例如,
计数器;将Counter类型定义为等效于int类型。这极大地提高了代码的可读性。
枚举声明了一组有序值——typedef只是给它加了一个方便的名字。第一个元素是0等等。
typedef enum {
Monday=1,
...
} WORKDAYS;
WORKDAYS today = Monday;
上面只是shapeType标记的枚举。
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
然后你可以这样使用它:-
ShapeType shape;
and
enum {
kCircle,
kRectangle,
kOblateSpheroid
}
ShapeType;
现在你可以这样使用它:-
enum ShapeType shape;