国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Objective-C 枚舉 中位運算 的使用

2019-11-09 14:39:48
字體:
來源:轉載
供稿:網友

前言

Enum,也就是枚舉,從C語言開始就有了,C++、java、Objective-C、Swift這些語言,當然都有對應的枚舉類型,功能可能有多有少,但是最核心的還是一個—-規范的定義代碼中的狀態、選項等“常量”。

 Use Enumerations for States, Options, and Status Codes

本節的內容就是如何正確的使用枚舉。

狀態與選項的區別(states and options)

在用 enum 之前,我個人覺得,區分一下狀態和選項的概念還是很必要的。

狀態,同時只能有一種,如“ OK ”,“ Error ”,不可能同時是OK和Error。

選項,同時可以有一種或一種以上,如App可以 同時 支持橫屏和豎屏,橫屏豎屏在這個時候就是“屏幕方向”的兩種不同的選項。

接下來,我們看看如何用枚舉定義狀態和選項。

enum與狀態(states)

不好的做法

經常看到這樣的寫法:

#define STATE_OK 0#define STATE_ERROR 1#define STATE_UNKNOW 2//直接用int型變量接收int STATE = STATE_UNKNOW;

這樣做有如下“不恰當”:

宏定義沒有類型約束,只是單純的替換。無法限制狀態的所有情況,如,認為的將STATE賦值成3,程序可能就會出錯,找不到匹配的狀態,因為編譯器不會對“ STATE = 3; ”提出警告。

正確的做法

typedef enum _TTGState {	TTGStateOK  = 0,	TTGStateError,	TTGStateUnknow} TTGState;//指明枚舉類型TTGState state = TTGStateOK;

用的時候就如下:

- (void)dealWithState:(TTGState)state {	switch (state) {		case TTGStateOK:			//...			break;		case TTGStateError:			//...			break;		case TTGStateUnknow:			//...			break;	}}

enum與選項 (options)

選項,就是說一個“選項變量”的類型要能夠同時表示一個或多個組合的選擇,如下例子:

//方向,可同時支持一個或多個方向typedef enum _TTGDirection {    TTGDirectionNone = 0,    TTGDirectionTop = 1 << 0,    TTGDirectionLeft = 1 << 1,    TTGDirectionRight = 1 << 2,    TTGDirectionBottom = 1 << 3} TTGDirection;

看,這里的選項是用 位運算 的方式定義的,這樣的好處就是,我們的選項變量可以如下表示:

//用“或”運算同時賦值多個選項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");}

direction變量的實際內存如下:

這樣,用位運算,就可以同時支持多個值。

enum在Objective-C中的“升級版”

一般來說,我們不能指定枚舉變量的實際類型是什么,就是說,我們不知道枚舉最后是int型,還是其他的什么類型。但是從C++ 11開始,我們可以為枚舉指定其實際的存儲類型,如下語法:

enum TTGState : NSInteger {/*...*/};

但是,我們在定義枚舉的時候如何保證兼容性呢?Foundation框架已經為我們提供了更加“統一、便捷”的枚舉定義方法,我們重新定義上面的例子:

//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};

所以,在開發Mac、iOS程序中,最好所有的枚舉都用“ NS_ENUM ”和“ NS_OPTIONS ”定義,保證統一。

總結

充分的用好枚舉,可以增強代碼的可讀性,減少各種“錯誤”,讓代碼更加的規范。


上一篇:制作打包工具


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景泰县| 兴仁县| 宁德市| 宜兰市| 云和县| 纳雍县| 长葛市| 百色市| 阆中市| 长沙市| 正蓝旗| 喀什市| 乌拉特中旗| 上饶县| 东丽区| 通渭县| 大冶市| 马鞍山市| 射洪县| 邓州市| 六枝特区| 博兴县| 保德县| 苍梧县| 五台县| 邵阳县| 绥棱县| 兴海县| 若羌县| 开远市| 连城县| 淳安县| 芮城县| 盐池县| 大关县| 扬州市| 湘潭县| 桐梓县| 宣城市| 长葛市| 毕节市|