iOS 關(guān)于枚舉的使用

引言:

枚舉值 它是一個整形(int) 并且,它不參與內(nèi)存的占用和釋放,枚舉定義變量即可直接使用,不用初始化.
在代碼中使用枚舉的目的只有一個,那就是增加代碼的可讀性.


使用:

枚舉的定義如下:

  typedef enum  
  {  
      //以下是枚舉成員  
      TestA = 0,  
      TestB,  
      TestC,  
      TestD  
  }Test;//枚舉名稱

亦可以如下定義(推薦:結(jié)構(gòu)比較清晰):

  typedef NS_ENUM(NSInteger, Test1)  
  {  
      //以下是枚舉成員  
      Test1A = 0,  
      Test1B = 1,  
      Test1C = 2,  
      Test1D = 3  
  };  

枚舉的定義還支持位運(yùn)算的方式定義,如下:
等于號后面必須等于1

  typedef NS_ENUM(NSInteger, Test)  
  {  
      TestA       = 1,      //1   1   1  
      TestB       = 1 << 1, //2   2   10      轉(zhuǎn)換成 10進(jìn)制  2  
      TestC       = 1 << 2, //4   3   100     轉(zhuǎn)換成 10進(jìn)制  4  
      TestD       = 1 << 3, //8   4   1000    轉(zhuǎn)換成 10進(jìn)制  8  
      TestE       = 1 << 4  //16  5   10000   轉(zhuǎn)換成 10進(jìn)制  16  
  };  

什么時候要用到這種方式呢?
那就是一個枚舉變量可能要代表多個枚舉值的時候. 其實(shí)給一個枚舉變量賦予多個枚舉值的時候,原理只是把各個枚舉值加起來罷了.
當(dāng)加起來以后,就獲取了一個新的值,那么為了保證這個值的唯一性,這個時候就體現(xiàn)了位運(yùn)算的重要作用.
位運(yùn)算可以確保枚舉值組合的唯一性.
因?yàn)槲贿\(yùn)算的計算方式是將二進(jìn)制轉(zhuǎn)換成十進(jìn)制,也就是說,枚舉值里面存取的是 計算后的十進(jìn)制值.
打個比方:
通過上面的位運(yùn)算方式設(shè)定好枚舉以后,打印出來的枚舉值分別是: 1 2 4 8 16
這5個數(shù)字,無論你如何組合在一起,也不會產(chǎn)生兩個同樣的數(shù)字.
手工的去創(chuàng)建位運(yùn)算枚舉,還有稍微有點(diǎn)花時間的,好在Apple已經(jīng)為我們準(zhǔn)備的uint.所以,用下面這種方式來初始化一個位運(yùn)算枚舉吧:

  typedef NS_ENUM(uint, Test)  
  {  
      TestA,  
      TestB,  
      TestC,  
      TestD,  
      TestE    
  };  

多枚舉值 賦值方式如下:

  Test tes = (TestA|TestB);

判斷枚舉變量是否包含某個固定的枚舉值,使用前需要確保枚舉值以及各個組合的唯一性:

  NSLog(@"%d %d %d %d %d",TestA,TestB,TestC,TestD,TestE);  
  Test tes = (TestA|TestB);  
  NSLog(@"%d",tes);  
  NSLog(@"%d",(tes & TestA));  

  if ((tes & TestA)) {  
      NSLog(@"有");  
  }else  
  {  
      NSLog(@"沒有");  
  }  
  NSLog(@"%d",(tes & TestB));  
  if ((tes & TestA)) {  
      NSLog(@"有");  
  }else  
  {  
      NSLog(@"沒有");  
  }  

  NSLog(@"%d",(tes & TestC));  
  if ((tes & TestC)) {  
      NSLog(@"有");  
  }else  
  {  
      NSLog(@"沒有");  
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,332評論 6 13
  • 目擊眾神死亡的草原上野花一片遠(yuǎn)在遠(yuǎn)方的風(fēng)比遠(yuǎn)方更遠(yuǎn)我的琴聲嗚咽 淚水全無我把這遠(yuǎn)方的遠(yuǎn)歸還草原一個叫木頭 ...
    HenryCheng閱讀 654評論 1 2
  • 奧盧(Oulu)應(yīng)該是一座理想中的城市。 它有著如下所謂「理想城市」應(yīng)當(dāng)具備的東西: 一座倚在城市邊緣古色古香的火...
    iClaud閱讀 560評論 0 2

友情鏈接更多精彩內(nèi)容