日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 关于枚举的使用

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 关于枚举的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言:

枚舉?它是一個整形(int) ?并且,它不參與內存的占用和釋放,枚舉定義變量即可直接使用,不用初始化.

在代碼中使用枚舉的目的只有一個,那就是增加代碼的可讀性.


使用:

枚舉的定義如下:

[csharp]?view plaincopy
  • typedef?enum??
  • {??
  • ????//以下是枚舉成員??
  • ????TestA?=?0,??
  • ????TestB,??
  • ????TestC,??
  • ????TestD??
  • }Test;//枚舉名稱??

  • 亦可以如下定義( 推薦:結構比較清晰 ):

    [csharp]?view plaincopy
  • typedef?NS_ENUM(NSInteger,?Test1)??
  • {??
  • ????//以下是枚舉成員??
  • ????Test1A?=?0,??
  • ????Test1B?=?1,??
  • ????Test1C?=?2,??
  • ????Test1D?=?3??
  • };??

  • 枚舉的定義還支持 位運算 的方式定義,如下:

    等于號后面必須等于1

    [csharp]?view plaincopy
  • typedef?NS_ENUM(NSInteger,?Test)??
  • {??
  • ????TestA???????=?1,??????//1???1???1??
  • ????TestB???????=?1?<<?1,?//2???2???10??????轉換成?10進制??2??
  • ????TestC???????=?1?<<?2,?//4???3???100?????轉換成?10進制??4??
  • ????TestD???????=?1?<<?3,?//8???4???1000????轉換成?10進制??8??
  • ????TestE???????=?1?<<?4??//16??5???10000???轉換成?10進制??16??
  • };??
  • 什么時候要用到這種方式呢?

    那就是一個枚舉變量可能要代表多個枚舉值的時候. 其實給一個枚舉變量賦予多個枚舉值的時候,原理只是把各個枚舉值加起來罷了.

    當加起來以后,就獲取了一個新的值,那么為了保證這個值的唯一性,這個時候就體現了位運算的重要作用.

    位運算可以確保枚舉值組合的唯一性.

    因為位運算的計算方式是將二進制轉換成十進制,也就是說,枚舉值里面存取的是 計算后的十進制值.

    打個比方:

    通過上面的位運算方式設定好枚舉以后,打印出來的枚舉值分別是: 1 2 4 8 16

    這5個數字,無論你如何組合在一起,也不會產生兩個同樣的數字.

    手工的去創建位運算枚舉,還有稍微有點花時間的,好在Apple已經為我們準備的uint.所以,用下面這種方式來初始化一個位運算枚舉吧:

    [csharp]?view plaincopy
  • typedef?NS_ENUM(uint,?Test)??
  • {??
  • ????TestA,??
  • ????TestB,??
  • ????TestC,??
  • ????TestD,??
  • ????TestE????
  • };??




  • 多枚舉值 賦值方式如下:

    [csharp]?view plaincopy
  • Test?tes?=?(TestA|TestB);??

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

    [csharp]?view plaincopy
  • 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(@"沒有");??
  • }??
  • 如果 沒有包含,將返回0, 0表示false NO 則進入else

    也可以隨時為枚舉變量累加某個值,但是要自己控制不要添加已經加入過的枚舉值, 枚舉變量的值不會有變動,但這樣將會誤導閱讀代碼的人

    [csharp]?view plaincopy
  • tes?|=TestC;??

  • 有累加,自然有累減了,如果累減不存在的枚舉值, 那么本次累減的枚舉值,會自動累加上去.

    [csharp]?view plaincopy
  • tes^=?TestE;??



  • 以上,差不多就介紹完了, 如果有什么疑問,歡迎提問.

    總結

    以上是生活随笔為你收集整理的iOS 关于枚举的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。