關于iOS中的枚舉的寫法

在日常開發(fā)中,枚舉的使用可以提升我們的代碼易讀性,一般枚舉的幾個寫法,我在此整理一下,梳理梳理自己的思路,如果有理解有誤的地方,希望各位不吝賜教。

首先,為了區(qū)分用途,枚舉被分為兩類: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合二為一,并且采用不同的宏來從代碼角度來區(qū)分。
此時蘋果建議的定義枚舉的方式如下:

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

這樣,就能知道使用的多選選項有哪些。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 參考資料 《編寫高質量iOS與OS X代碼的52個有效方法》中第5條:用枚舉表示狀態(tài)、選項、狀態(tài)碼 枚舉類型的基本...
    水止云起閱讀 2,656評論 0 3
  • 轉載自:http://mp.weixin.qq.com/s?__biz=MzA3NzM0NzkxMQ==&mid=...
    YYT1992閱讀 767評論 3 0
  • 前言 Enum,也就是枚舉,從C語言開始就有了,C++、Java、Objective-C、Swift這些語言,當然...
    腦路異常閱讀 7,577評論 1 6
  • 對于OC中的枚舉類型,雖然知道有NS_ENUM和NS_OPTION,然而并不是十分清楚它們之間的區(qū)別。另外,也很好...
    ePan閱讀 18,774評論 1 14
  • 浦西黃氏二世祖 黃國棟血書(南宋駙馬、進士) 我聽說編撰家譜,目的在于上記祖先事跡,使后世子孫了解;下記子...
    閩頌私記閱讀 5,364評論 0 0

友情鏈接更多精彩內容