iOS枚舉的運用

來源:互聯網
上載者:User

標籤:class   feed   integer   多個   輸出   區別   cat   十六進位   0x03   

1.什麼是枚舉?

枚舉其實就是一個整型常數的集合,最簡單的例子就是表示星期的SUN, MON, TUE, WED, THU, FRI,SAT, 就是一個枚舉。

2.iOS中枚舉的使用

   在ObjC中可以使用C語言的方式進行枚舉,其實ObjC的枚舉就是在C語言上演化而來,先瞭解C語言定義一個枚舉的方式有助於我們對枚舉的理解。

   

   下面我們定義一個枚舉類型Animal,形式為 enum 枚舉名{ 枚舉值表 };   我們在名為Animal的枚舉中申明了多個成員名,我們可以看作是整形常量的別名。我們把cat賦值為1,系統會

   預設為後續枚舉成員的值在前一個成員上加1。當然枚舉成員的值我們也可以自訂,例如我們可以為cat賦值為50,dog賦值為100,所有的賦值關鍵就是讓編程人員容易讀懂和理解。

  • enum:關鍵字用於聲明枚舉
  • 在枚舉中不能出現同名的枚舉成員和枚舉類型     
//枚舉類型的定義enum Animal{    cat=1, dog, pig, bee, monkey, elephant , butterfly};

enum Animal animal = cat;//聲明Animal枚舉型的枚舉變數

  

  我們也可以同時聲明枚舉類型和枚舉型變數,下面第一種定義方式沒有定義枚舉的類型,但是聲明了枚舉變數workday。  第二中分別定義了枚舉類型enum week和變數days。

//類型定義與變數聲明同時進行enum //跟第一個定義不同的是,此處的類型標號省略,這是允許的。{    saturday,    sunday = 0,    monday,    tuesday,    wednesday,    thursday,    friday} workday; //變數workday
enum week { Mon=1, Tue, Wed, Thu, Fri ,Sat, Sun} days; //變數days的類型為枚舉型enum week

   

  用typedef關鍵字將枚舉類型定義成別名,並利用該別名進行變數聲明,下面例子中我們將enum Car定義成別名Car。

typedef enum Car
{ //以下是枚舉成員 BMW = 0, Benz, Ferrari, Royce}Car;//枚舉名稱Car car;//聲明Car類型的變數
typedef enum    //可以省略enum Car中的Car{    //以下是枚舉成員    BMW = 0,    Benz,    Ferrari,    Royce}Car;//枚舉名稱
Car  car;//聲明Car類型的變數

 

  在iOS中主要蘋果推薦用NS_ENUM,NS_OPTIONS 兩種方式去聲明一個枚舉。

  • NS_ENUM聲明一般類型, NS_OPTIONS聲明掩碼(bitmasked)類型  

  下面使用NS_OPTIONS掩碼類型進行聲明枚舉,形式為 typedef NS_OPTIONS(枚舉成員類型,枚舉類型名稱){枚舉成員...};      

    "<<"是左移運算子,"1 << 0"表示1左移0位。在二進位中,左移意味著對應的十進位數乘2。

  好處:我們在枚舉值中看見<<那我們就可以通過|(位元運算符:或)進行組合!如:下面黃色標註的指派陳述式。

//NS_OPTIONS:是用來聲明位元遮罩(bitmasked)typedef NS_OPTIONS(NSInteger,MyCatEvent) {    CatNone     = 0,    CatWalk     = 1 << 0, // <<表示左移運算子 表示0001    CatJump     = 1 << 1,    CatBark     = 1 << 2,    CatEat      = 1 << 3,    CatSleep    = 1 << 4,    CatDaily     = CatWalk | CatJump};

    通過&進行判斷我們來看看輸出結果如:

  

    我們可以看到我們定義的CatWalk值為1,CatJump為2,所以或運算的value值為3。在列印語句中,我們用value對所有的枚舉成員進行與運算。我們可以通過輸出的值來判斷value

    包含哪些枚舉成員。結果為0表示不包含,結果為1對應catwalk,以此類推。

 

  用NS_ENUM聲明一般類型,下面聲明了兩種枚舉類型,類型成員分別賦值十進位數和十六進位數。

  為什麼要用兩種不同的方式呢?本質上這兩種方式並沒有什麼區別,但是16進位的數更容易對轉換到2進位,當我們需要對枚舉成員做與、或運算時更加的方便。

//NS_ENUM:是用來聲明一般的NSInteger(下面代碼使用NSInteger)類型的枚舉typedef NS_ENUM(NSInteger,MyBoyEvent){    BoyFeedCat  = 0,    BoyWalkCat  = 1,};  
//十六進位枚舉typedef NS_ENUM(NSInteger,DailyEvent){    DailyNone       = 0x00,    DailyRead       = 0x01,    DailyWrite      = 0x02,    DailySing       = 0x03,    DailyShopping   = 0x04,};

  以上如果有任何錯誤,希望大家指正。

  更多的iOS筆記可以來到我的部落格:tianxianbob.com 交流

參考連結:http://www.cnblogs.com/JCSU/articles/1299051.html

     http://www.jianshu.com/p/97e582fe89f3

iOS枚舉的運用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.