我不认为我从根本上理解枚举是什么,以及什么时候使用它。
例如:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
这里真正声明的是什么?
我不认为我从根本上理解枚举是什么,以及什么时候使用它。
例如:
typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
这里真正声明的是什么?
当前回答
枚举可以减少许多类型的“错误”,并使代码更易于管理
#define STATE_GOOD 0
#define STATE_BAD 1
#define STATE_OTHER 2
int STATE = STATE_OTHER
这个定义没有约束。这只是一个简单的代换。 它不能限制国家的所有条件。当STATE被赋值为5时,程序将出错,因为没有匹配的状态。但是编译器不会警告STATE = 5
所以这样用比较好
typedef enum SampleState {
SampleStateGood = 0,
SampleStateBad,
SampleStateOther
} SampleState;
SampleState state = SampleStateGood;
其他回答
typedef允许程序员将一种Objective-C类型定义为另一种。例如,
计数器;将Counter类型定义为等效于int类型。这极大地提高了代码的可读性。
枚举可以减少许多类型的“错误”,并使代码更易于管理
#define STATE_GOOD 0
#define STATE_BAD 1
#define STATE_OTHER 2
int STATE = STATE_OTHER
这个定义没有约束。这只是一个简单的代换。 它不能限制国家的所有条件。当STATE被赋值为5时,程序将出错,因为没有匹配的状态。但是编译器不会警告STATE = 5
所以这样用比较好
typedef enum SampleState {
SampleStateGood = 0,
SampleStateBad,
SampleStateOther
} SampleState;
SampleState state = SampleStateGood;
从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”视频。
更新 官方文件的链接在这里。
您可以使用下面的格式,原始默认值从0开始,所以
kCircle是0, kRectangle是1, kOblateSpheroid是2。
您可以指定自己的特定起始值。
typedef enum : NSUInteger {
kCircle, // for your value; kCircle = 5, ...
kRectangle,
kOblateSpheroid
} ShapeType;
ShapeType circleShape = kCircle;
NSLog(@"%lu", (unsigned long) circleShape); // prints: 0
Typedef对于重新定义现有变量类型的名称非常有用。它提供了调用数据类型的简短而有意义的方式。 例句:
typedef unsigned long int TWOWORDS;
这里,unsigned long int类型被重新定义为TWOWORDS类型。因此,我们现在可以声明unsigned long int类型的变量:
TWOWORDS var1, var2;
而不是
unsigned long int var1, var2;