前言:oc中枚舉的正確使用,可以增強代碼的可讀性,減少各種“錯誤”,讓代碼更加的規範。下麵先介紹枚舉的用法,最後介紹個人對枚舉的理解,什麼是枚舉,為什麼用枚舉。 一. OC中,枚舉的使用 1. 寫法1格式:關鍵字 enum 枚舉名字{枚舉成員,枚舉成員2}; 使用方法:enum 枚舉名稱 變數名稱 ...
前言:oc中枚舉的正確使用,可以增強代碼的可讀性,減少各種“錯誤”,讓代碼更加的規範。下麵先介紹枚舉的用法,最後介紹個人對枚舉的理解,什麼是枚舉,為什麼用枚舉。
一. OC中,枚舉的使用
1. 寫法1格式:關鍵字 enum 枚舉名字{枚舉成員,枚舉成員2};
1 /* 2 * 枚舉 可以寫在@interface 裡面 3 **/ 4 enum Test{ 5 test = 1, 6 test1 = 2, 7 };
使用方法:enum 枚舉名稱 變數名稱 = 枚舉成員。
1 enum Test var = test; 2 NSLog(@"%u", var); 3 // 輸出值為 1
註意:如果枚舉成員不設置值,預設第一個枚舉成員值為整型0,後續枚舉成員值依次加1。
2.寫法2格式,typedef enum 枚舉名稱{枚舉成員}枚舉別名;
1 /* 2 定義'枚舉類型', Test11 是屬性類型 相當於nsstring,int,。。 3 其中Test1 枚舉名字可以省略不寫,稱“匿名枚舉” 4 **/ 5 typedef enum Test1{ 6 test11 = 1, 7 test12 = 2, 8 }Test11;
使用方法:屬性類型 變數名稱 = 枚舉成員;
1 Test11 var1 = test12; 2 NSLog(@"%u", var1); 3 // 輸出值為 2
註意:typedef enum 定義的枚舉,可以理解為枚舉類型,相當於nsstring,int等,可用屬性類型直接創建變數,然後完成賦值。
這種寫法原有的枚舉名稱可以省略,稱“匿名枚舉”。
3.寫法3,ios6之後,也是最標準的寫法,更加的統一,規範。用“NS_ENUM”和“NS_OPTIONS”定義
格式:typedef NS_ENUM(存儲類型,屬性類型){枚舉成員};
1 /* 2 * 存儲類型,表示成員變數的值類型,如NSInteger 3 * 屬性類型,上文說到的 枚舉別名,可以此名稱調用枚舉 4 * 其中 NS_ENUM 多用於一般枚舉,NS_OPTIONS 多用於位移枚舉 5 **/ 6 typedef NS_ENUM(NSInteger,Test6){ 7 test61 = 1, 8 test62 = 2, 9 }; 10 11 typedef NS_OPTIONS(NSUInteger, Test7) { 12 TestNone = 0, 13 TestA7 = 1 << 0, 14 TestB7 = 1 << 1, 15 TestC7 = 1 << 2, 16 TestD7 = 1 << 3 17 };
使用方法:屬性別名 變數名稱 = 枚舉成員;
Test6 var6 = test62; NSLog(@"%ld", (long)var6); // 輸出值為 2 Test7 var7 = TestA7 | TestC7; NSLog(@"%ld", (long)var7); // 輸出值為 5 // 0001 | 0100 = 0101 十進位為5
註意:上面TestC7 1<<2,表示2進位1 左移2位,為0100,與0001 或運算,得到0101,轉換十進位為5.
常用枚舉用 NS_ENUM,NS_OPTIONS 多用於位移枚舉,位的運算(或且非異或等)
二. 枚舉錯誤的寫法,編譯時不會報錯,但是運行報錯
1 //錯誤寫法1 2 enum { 3 test21 = 1, 4 test22 = 2, 5 }Test2; 6 7 //錯誤寫法2 8 NS_ENUM(NSInteger,Test3){ 9 test31 = 1, 10 test32 = 2, 11 }; 12 13 //錯誤寫法3 14 NS_OPTIONS(NSUInteger, Test4){ 15 test41 = 1, 16 test42 = 2, 17 }; 18 19 NS_OPTIONS(NSUInteger, Test5) { 20 TestA = 1 << 0, 21 TestB = 1 << 1, 22 TestC = 1 << 2, 23 TestD = 1 << 3 24 };
三. 枚舉的理解
1.oc是基於c語言的,在c語言中枚舉的定義
在程式中,可能需要為某些整數定義一個別名,我們可以利用預處理指令#define來完成這項工作,您的代碼可能是:
1 #define MON 1 2 #define TUE 2 3 #define WED 3 4 #define THU 4 5 #define FRI 5 6 #define SAT 6 7 #define SUN 7
這樣很繁瑣,在此,我們定義一種新的數據類型,希望它能完成同樣的工作。這種新的數據類型叫枚舉型。
2.枚舉用於規範的定義代碼中的狀態、選項等“常量”。
其中狀態與選項的概念區別(states and options)
狀態,同時只能有一種,如“OK”,“Error”,不可能同時是OK和Error。
選項,同時可以有一種或一種以上,如App可以同時支持橫屏和豎屏,橫屏豎屏在這個時候就是“屏幕方向”的兩種不同的選項。
總結:
個人覺得枚舉還是有必要掌握的,格式清晰,使用簡便。能減少代碼的冗餘度,提高代碼規範,增強可讀性.
ps:第一次總結,有錯誤之處還請指正,thanks,荊軻刺秦王~~
參考文檔1:https://www.cnblogs.com/JCSU/articles/1299051.html
參考文檔2:https://blog.csdn.net/snow_xuey/article/details/55258875
參考文檔3:https://blog.csdn.net/imkata/article/details/78861077