Foundation框架已經為我們提供了更加“統一、便捷”的枚舉定義方法
最好所有的枚舉都用“NS_ENUM”和“NS_OPTIONS”定義,保證統一
在iOS6之后引入兩個宏來定義枚舉實際上是將enum定義和typedef合二為一,并且采用不同的宏來從代碼角度來區分。
NS_ENUM,定義狀態等普通枚舉
typedef NS_ENUM(NSUInteger, TTGState) {
TTGStateOK = 0,
TTGStateError,
TTGStateUnknow
};
NS_OPTIONS,定義選項
typedef NS_OPTIONS(NSUInteger, TTGDirection) {
TTGDirectionNone = 0,
TTGDirectionTop = 1 << 0,
TTGDirectionLeft = 1 << 1,
TTGDirectionRight = 1 << 2,
TTGDirectionBottom = 1 << 3
};
實現過程大概如下,通過位運算組合判斷,這樣,用位運算,就可以同時支持多個值。
//用“或”運算同時賦值多個選項
TTGDirection direction = TTGDirectionTop | TTGDirectionLeft | TTGDirectionBottom;
//用“與”運算取出對應位
if (direction & TTGDirectionTop) {
NSLog(@"top");
}
if (direction & TTGDirectionLeft) {
NSLog(@"left");
}
if (direction & TTGDirectionRight) {
NSLog(@"right");
}
if (direction & TTGDirectionBottom) {
NSLog(@"bottom");
}
使用方式如下:
//隨便添加一個UITextField
UITextField *field = [UITextField new];
//Begin,Changed,DidEnd都能觸發UITextField的事件
[field addTarget:self action:@selector(textFieldDidChanged) forControlEvents: UIControlEventEditingDidBegin |
UIControlEventValueChanged |
UIControlEventEditingDidEnd
];
[self.view addSubview:field];
參考:
1、http://tutuge.me/2015/03/21/effective-objective-c-5-enum/?utm_source=tuicool&utm_medium=referral
2、http://www.lxweimin.com/p/97e582fe89f3