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

首頁 > 系統 > iOS > 正文

iOS開發之枚舉用法小結

2020-07-26 03:09:59
字體:
來源:轉載
供稿:網友

前言

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

舉個例子,我們想要在開發中根據四季的變化做不同的操作,我們首先想到的可能會是定義一個int型變量,通過為該變量賦不同的值來表示四季(e.g. 1為春天,2為夏天,3為秋天,4為冬天).但是,對于閱讀該份代碼的人來講,他們并不能在短時間內就明白數字1234所代表的具體含義.這個時候,選擇使用枚舉則可以應對該需求

C語言中的枚舉

在C語言中定義枚舉類型的方式如下

enum 枚舉名稱{  標識符 = 整型常量,  標識符 = 整型常量,  標識符 = 整型常量,  標識符 = 整型常量};

以"定義一個枚舉名稱為Test,擁有TestA、TestB等枚舉成員的枚舉類型"為例,定義方式如下

enum Test{  TestA = 0,  TestB = 1,  TestC = 2,  TestD = 3};

    注1: 當枚舉成員都未設置"=整型常量"時,默認從第一個標識符開始,從0依次遞增加1

    注2: 當為某個枚舉成員設置"=整型常量"時,其后面的標識符會在此基礎上依次遞增加1

在使用該枚舉類型時,我們需要創建一個枚舉變量

enum 枚舉名稱 枚舉變量 = 枚舉變量值;

以"創建一個枚舉名稱為Test的枚舉變量test,并為其賦值TestB"為例

enum Test test = TestB;

注: 枚舉變量值的取值只能從對應枚舉類型的枚舉成員中選擇

我們也可以在定義枚舉類型的同時定義枚舉變量,該枚舉變量不用初始化,可直接對其進行賦值并使用

enum Test{  TestA = 0,  TestB,  TestC,  TestD} test;

注: 該枚舉名稱可以省略,直接定義枚舉變量即可(稱作"匿名枚舉")

通過typedef為枚舉類型設置一個"別名",這樣便可以像使用int一樣使用枚舉類型

typedef enum _Test{  TestA = 0,  TestB,  TestC,  TestD} Test;

定義"別名"后,便可采用如下方式定義枚舉變量

Test test = TestB;

針對匿名枚舉,在通過typedef設置"別名"便變成如下形式

typedef enum{  TestA = 0,  TestB,  TestC,  TestD} Test;

定義"別名"后,便可采用如下方式定義枚舉變量

Test test = TestB;

OC語言中的枚舉

在Objective-C語言中,Apple在iOS6中引入了兩個宏來重新定義枚舉類型(即:NS_ENUM與NS_OPTIONS),這兩者在本質上并沒有差別,都是用于定義枚舉類型,但是在使用中NS_ENUM多用于一般枚舉,而NS_OPTIONS則多用于帶有移位運算的枚舉

NS_ENUM使用示例

typedef NS_ENUM(NSInteger, Test){  TestA = 0,  TestB,  TestC,  TestD};

NS_OPTIONS使用示例

typedef NS_OPTIONS(NSUInteger, Test) {  TestA = 1 << 0,  TestB = 1 << 1,  TestC = 1 << 2,  TestD = 1 << 3};
typedef NS_OPTIONS(NSUInteger, Test) {  TestNone = 0,  TestA = 1 << 0,  TestB = 1 << 1,  TestC = 1 << 2,  TestD = 1 << 3};

帶有移位運算的枚舉多用于同一個枚舉變量可以同時賦值多個枚舉成員的情況,其原理就是將各個枚舉值按位或(|),因為移位運算的枚舉成員可以保證按位或(|)計算之后結果的唯一性,所以每種結果都能反向計算出是由哪幾個枚舉成員按位或(|)而成

以"使用按位或(|)為枚舉變量test同時賦值枚舉成員TestA、TestB與TestC"為例

Test test = TestA | TestB;test |= TestC;

以"使用按位異或(^)為枚舉變量test去掉一個枚舉成員TestC"為例

Test test = TestA | TestB | TestC;test ^= TestC;

注: 如果枚舉變量test本身并未賦值TestC,那么使用按位異或(^)會為枚舉變量test多賦值一個枚舉成員TestC
以"使用按位與(&)判斷枚舉變量test是否賦值了枚舉成員TestA"為例

Test test = TestA | TestB;if (test & TestA){  NSLog(@"yes");}else{  NSLog(@"no");}

總結

以上就是這篇文章的全部內容了,希望能對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建宁县| 湘阴县| 宝山区| 贵南县| 城口县| 巴彦淖尔市| 桃江县| 文水县| 固安县| 镇赉县| 牡丹江市| 开阳县| 澎湖县| 安溪县| 深州市| 新密市| 马山县| 长岛县| 黑河市| 南汇区| 刚察县| 巴彦县| 西乡县| 天长市| 镇远县| 祁连县| 通辽市| 读书| 汽车| 福贡县| 普洱| 内乡县| 双城市| 潞西市| 大理市| 南澳县| 家居| 延川县| 海宁市| 延川县| 克山县|