媒介
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"); }
總結
以上就是這篇文章的全體內容了,願望能對年夜家的進修或許任務帶來必定的贊助,假如有疑問年夜家可以留言交換。
【iOS開辟之列舉用法小結】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!