iOS枚举的定义与使用

开发中使用枚举的目的——为了增长代码的可读性markdown

分类

NS_ENUM、NS_OPTIONS 这二者在本质上并无差异,都是用于定义枚举类型。但在使用中,NS_ENUM多用于通常枚举,而NS_OPTIONS则多用于带有移位运算的枚举。atom

定义

在类的.h文件中,在interface和import之间。spa

一. NS_ENUM,定义状态等普通枚举code

typedef NS_ENUM(NSUInteger, myKeyBoardType) {
    KeyBoardTypeDefault = 0,
    KeyBoardTypeNumber,
    KeyBoardTypeEmail
};
····
// myKeyBoardType为枚举命名,对应于某个属性
@property(nonatomic,assign)NSUInteger myKeyBoardType;

复制代码

状态枚举,不能共存,只能存在枚举值的其中一个。orm

二. NS_OPTIONS,定义选项 枚举的定义还支持 位运算的方式定义ci

typedef NS_OPTIONS(NSUInteger, TTGDirection) {
    TTGDirectionNone = 0,
    TTGDirectionTop = 1 << 0,   //2 2 10 转换成 10进制 2
    TTGDirectionLeft = 1 << 1,    //4 3 100 转换成 10进制 4
    TTGDirectionRight = 1 << 2,    //8 4 1000 转换成 10进制 8
    TTGDirectionBottom = 1 << 3    //16 5 10000 转换成 10进制 16
};
复制代码

这里的选项是用位运算的方式定义的,选项枚举中各值能够同时存在。开发

应用场景:一个枚举变量可能要表明多个枚举值的时候it

其实给一个枚举变量赋予多个枚举值的时候,原理只是把各个枚举值加起来罢了。当加起来之后,就获取了一个新的值,那么为了保证这个值的惟一性,这个时候就体现了位运算的重要做用。位运算能够确保枚举值组合的惟一性。 由于位运算的计算方式是将二进制转换成十进制,也就是说,枚举值里面存取的是 计算后的十进制值。打个比方: 经过上面的位运算方式设定好枚举之后,打印出来的枚举值分别是: 1 2 4 8 16 这5个数字,不管你如何组合在一块儿,也不会产生两个一样的数字。io

###使用 在须要的地方导入类文件,table

外界对属性myKeyBoardType进行赋值时,会直接提示枚举中的选项。

应用——根据不一样类型建立按钮

结合switch case 结构使用

typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
    MKButtonEdgeInsetsStyleTop, // image在上,label在下
    MKButtonEdgeInsetsStyleLeft, // image在左,label在右
    MKButtonEdgeInsetsStyleBottom, // image在下,label在上
    MKButtonEdgeInsetsStyleRight // image在右,label在左
};

@interface UIButton (ImageTitleSpacing)
@end
复制代码

//用“或”运算同时赋值多个选项
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");

复制代码
相关文章
相关标签/搜索