iOS开发常用知识点

关于iOS中的枚举的写法

2017-05-02  本文已影响0人  IUVO

在日常开发中,枚举的使用可以提升我们的代码易读性,一般枚举的几个写法,我在此整理一下,梳理梳理自己的思路,如果有理解有误的地方,希望各位不吝赐教。

首先,为了区分用途,枚举被分为两类:NS_ENUM , NS_OPTIONS,本质上都是枚举,但是NS_ENUM是用于通用情况,NS_OPTIONS一般用于具有位移操作或者特殊情况。

定义枚举的NS_ENUM,也有两种方法:

iOS6Mac OS 10.8之前,定义枚举如下:

typedef enum : NSUInteger {
    UISwipGestureRecognizerDirectionUp    = 0,
    UISwipGestureRecognizerDirectionLeft  = 1,
    UISwipGestureRecognizerDirectionDown  = 2,
    UISwipGestureRecognizerDirectionRight = 3
} UISwipGestureRecognizerDirection;

iOS6Mac OS 10.8之后,苹果引入了两个宏来重新定义这两个枚举类型,实际上是将enum定义和typedef合二为一,并且采用不同的宏来从代码角度来区分。
此时苹果建议的定义枚举的方式如下:

typedef NS_ENUM(NSUInteger, UISwipGestureRecognizerDirection) {
    UISwipGestureRecognizerDirectionUp    = 0,
    UISwipGestureRecognizerDirectionLeft  = 1,
    UISwipGestureRecognizerDirectionDown  = 2,
    UISwipGestureRecognizerDirectionRight = 3
};

NS_ENUM定义的枚举只是用简单的几个数字代表枚举选项,所以不能几个枚举项同时存在,只能选择其中一项。

定义枚举的NS_OPTIONS写法如下:

typedef NS_OPTIONS(NSUInteger, UISwipGestureRecognizerDirection) {
    UISwipGestureRecognizerDirectionUp    = 1 << 0,//代表 1 乘以 2的0次方
    UISwipGestureRecognizerDirectionLeft  = 1 << 1,//代表 1 乘以 2的1次方
    UISwipGestureRecognizerDirectionDown  = 1 << 2,//代表 1 乘以 2的2次方
    UISwipGestureRecognizerDirectionRight = 1 << 3 //代表 1 乘以 2的3次方
};

其中<<号代表左移,就是通过这个运算符,才能实现同时对枚举的多种选择,也就是NS_OPTIONS,具体是如何实现的呢,说来也很简单:
首先,在使用的时候,对于NS_OPTIONS中的每个选项使用"|"(或运算)符号进行分隔:

self.direction = UISwipGestureRecognizerDirectionRight | UISwipGestureRecognizerDirectionLeft;

这样,传入的值就为或运算0B1000|0B0010的结果0B1010,在使用的时候,对于传入的结果与选项一一进行与运算,如果包含就大于0,反之,等于0:

`0B1010`&`0B0001` = `0B0000` = 0,不包含UISwipGestureRecognizerDirectionUp
`0B1010`&`0B0010` = `0B0010` > 0,包含UISwipGestureRecognizerDirectionLeft
`0B1010`&`0B0100` = `0B0000` = 0,不包含UISwipGestureRecognizerDirectionDown
`0B1010`&`0B1000` = `0B1000` > 0,包含UISwipGestureRecognizerDirectionRight

这样,就能知道使用的多选选项有哪些。

上一篇 下一篇

猜你喜欢

热点阅读