枚舉(Enum)
枚舉(Enum)是C語言中的一種基本數(shù)據(jù)類型,是一個"被命名的整型常量"的集合
規(guī)范的定義代碼中的狀態(tài)缓屠、選項等“常量”
不參與內存的占用和釋放
在開發(fā)中使用枚舉的目的,是為了增加代碼的可讀性
enum與狀態(tài)(states)
定義一個枚舉類型
//定義枚舉類型
typedef enum _SKYState {
SKYStateOK = 0,
SKYStateError,
SKYStateUnknow
} SKYState;
//指明枚舉類型
//-------in parameters---------------
@property (nonatomic,assign) SKYState state; //操作類型
typedef為C語言的關鍵字,作用是為一種數(shù)據(jù)類型定義一個新名字其做。這里的數(shù)據(jù)類型包括內部數(shù)據(jù)類型(int,char等)和自定義的數(shù)據(jù)類型(struct等)虫溜。
枚舉類型的值默認是連續(xù)的自然數(shù)
例子中的SKYStateOK =0,//開始為0,那么其后的就依次為1掉蔬,2含衔,3....
一般只需要設置枚舉中第一個的值就可以。
使用一個枚舉類型
- (void)dealWithState:(SKYState)state {
switch (state) {
case SKYStateOK:
//...
break;
case SKYStateError:
//...
break;
case SKYStateUnknow:
//...
break;
}
}
enum與選項 (options)
選項 (options) : 就是說一個“選項變量”的類型要能夠同時表示一個或多個組合的選擇
定義一個枚舉類型
//方向姥闭,可同時支持一個或多個方向
typedef enum _SKYDirection {
SKYDirectionNone = 0,// 0 0
SKYDirectionTop = 1 << 0,// 1 1
SKYDirectionLeft = 1 << 1,// 2 10 轉換成 10進制 2
SKYDirectionRight = 1 << 2,// 4 100 轉換成 10進制 4
SKYDirectionBottom = 1 << 3// 8 1000 轉換成 10進制 8
} SKYDirection;
- 選項是用位運算的方式定義的
SKYDirectionNone 0 0 0 0 0 0 0 0
SKYDirectionTop 0 0 0 0 0 0 0 1
SKYDirectionLeft 0 0 0 0 0 0 1 0
SKYDirectionRight 0 0 0 0 0 1 0 0
SKYDirectionBottom 0 0 0 0 0 0 0 0
-
<<帶符號左移 (n<<2 將整型值帶符號左移2位 )
將一個運算符對象的各二進制位全部左移若干位(左邊的二進制位丟棄丹鸿,右邊補0)
操作數(shù)每左移一位,相當于該數(shù)乘以2
例如:3<<2 后棚品,結果為12
3的二進制位11靠欢,左移兩位后,右邊補2個0就是1100铜跑。1100轉為10進制為12门怪。左移操作就相當于2的2次方×3。 每左移1位次方就增1
-
>>帶符號右移 (n>>2 將整型值帶符號右移2位 )
將一個數(shù)的各二進制位全部右移若干位锅纺,正數(shù)左補0掷空,負數(shù)左補1,右邊丟棄囤锉。
操作數(shù)每右移一位坦弟,相當于該數(shù)除以2 ,然后取整
例如:9>>1 后,結果為4
9的二進制為1001官地,右移1位后减拭,左正數(shù)補0,右邊丟棄区丑。結果為 0100拧粪。轉為10進制后為4。
使用一個枚舉類型
//用“或”運算同時賦值多個選項
SKYDirection direction = SKYDirectionTop | SKYDirectionLeft | SKYDirectionBottom;
//用“與”運算取出對應位
if (direction && SKYDirectionTop) {
NSLog(@"top");
}
if (direction && SKYDirectionLeft) {
NSLog(@"left");
}
if (direction && SKYDirectionRight) {
NSLog(@"right");
}
if (direction && SKYDirectionBottom) {
NSLog(@"bottom");
}
enum與Objective-C
在Objective-C中沧侥,枚舉可用“NS_ENUM”和“NS_OPTIONS”定義
-
NS_ENUM
NS_ENUM一般用來定義默認的枚舉值
#define NS_ENUM(...) CF_ENUM(__VA_ARGS__)
-
NS_OPTIONS
NS_OPTIONS一般用來定義位移相關操作的枚舉值
#define NS_OPTIONS(_type, _name) CF_OPTIONS(_type, _name)
- 定義枚舉類型
//NS_ENUM可霎,定義狀態(tài)等普通枚舉
typedef NS_ENUM(NSUInteger, SKYState) {
SKYStateOK = 0,
SKYStateError,
SKYStateUnknow
};
//方向,可同時支持一個或多個方向
//NS_OPTIONS宴杀,定義選項
typedef NS_OPTIONS(NSUInteger, SKYDirection) {
SKYDirectionNone = 0,// 0 0
SKYDirectionTop = 1 << 0,// 1 1
SKYDirectionLeft = 1 << 1,// 2 10 轉換成 10進制 2
SKYDirectionRight = 1 << 2,// 4 100 轉換成 10進制 4
SKYDirectionBottom = 1 << 3// 8 1000 轉換成 10進制 8
};