国产精品入口免费视频_亚洲精品美女久久久久99_波多野结衣国产一区二区三区_农村妇女色又黄一级真人片卡

iOS開(kāi)發(fā)之枚舉用法使用

時(shí)間:2022-04-04 01:07:51 手機(jī) 我要投稿
  • 相關(guān)推薦

iOS開(kāi)發(fā)之枚舉用法使用

  前言

  Enum,也就是枚舉,從C語(yǔ)言開(kāi)始就有了,C++、Java、Objective-C、Swift這些語(yǔ)言,當(dāng)然都有對(duì)應(yīng)的枚舉類(lèi)型,功能可能有多有少,但是最核心的還是一個(gè)—規(guī)范的定義代碼中的狀態(tài)、選項(xiàng)等“常量”。

  舉個(gè)例子,我們想要在開(kāi)發(fā)中根據(jù)四季的變化做不同的操作,我們首先想到的可能會(huì)是定義一個(gè)int型變量,通過(guò)為該變量賦不同的值來(lái)表示四季(e.g. 1為春天,2為夏天,3為秋天,4為冬天).但是,對(duì)于閱讀該份代碼的人來(lái)講,他們并不能在短時(shí)間內(nèi)就明白數(shù)字1234所代表的具體含義.這個(gè)時(shí)候,選擇使用枚舉則可以應(yīng)對(duì)該需求

  C語(yǔ)言中的枚舉

  在C語(yǔ)言中定義枚舉類(lèi)型的方式如下

  enum 枚舉名稱(chēng){ 標(biāo)識(shí)符 = 整型常量, 標(biāo)識(shí)符 = 整型常量, 標(biāo)識(shí)符 = 整型常量, 標(biāo)識(shí)符 = 整型常量};

  以"定義一個(gè)枚舉名稱(chēng)為T(mén)est,擁有TestA、TestB等枚舉成員的枚舉類(lèi)型"為例,定義方式如下

  enum Test{ TestA = 0, TestB = 1, TestC = 2, TestD = 3};

  注1: 當(dāng)枚舉成員都未設(shè)置"=整型常量"時(shí),默認(rèn)從第一個(gè)標(biāo)識(shí)符開(kāi)始,從0依次遞增加1

  注2: 當(dāng)為某個(gè)枚舉成員設(shè)置"=整型常量"時(shí),其后面的標(biāo)識(shí)符會(huì)在此基礎(chǔ)上依次遞增加1

  在使用該枚舉類(lèi)型時(shí),我們需要?jiǎng)?chuàng)建一個(gè)枚舉變量

  enum 枚舉名稱(chēng) 枚舉變量 = 枚舉變量值;

  以"創(chuàng)建一個(gè)枚舉名稱(chēng)為T(mén)est的枚舉變量test,并為其賦值TestB"為例

  enum Test test = TestB;

  注: 枚舉變量值的取值只能從對(duì)應(yīng)枚舉類(lèi)型的枚舉成員中選擇

  我們也可以在定義枚舉類(lèi)型的同時(shí)定義枚舉變量,該枚舉變量不用初始化,可直接對(duì)其進(jìn)行賦值并使用

  enum Test{ TestA = 0, TestB, TestC, TestD} test;

  注: 該枚舉名稱(chēng)可以省略,直接定義枚舉變量即可(稱(chēng)作"匿名枚舉")

  通過(guò)typedef為枚舉類(lèi)型設(shè)置一個(gè)"別名",這樣便可以像使用int一樣使用枚舉類(lèi)型

  typedef enum _Test{ TestA = 0, TestB, TestC, TestD} Test;

  定義"別名"后,便可采用如下方式定義枚舉變量

  Test test = TestB;

  針對(duì)匿名枚舉,在通過(guò)typedef設(shè)置"別名"便變成如下形式

  typedef enum{ TestA = 0, TestB, TestC, TestD} Test;

  定義"別名"后,便可采用如下方式定義枚舉變量

  Test test = TestB;

  OC語(yǔ)言中的枚舉

  在Objective-C語(yǔ)言中,Apple在iOS6中引入了兩個(gè)宏來(lái)重新定義枚舉類(lèi)型(即:NS_ENUM與NS_OPTIONS),這兩者在本質(zhì)上并沒(méi)有差別,都是用于定義枚舉類(lèi)型,但是在使用中NS_ENUM多用于一般枚舉,而NS_OPTIONS則多用于帶有移位運(yùn)算的枚舉

  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};

  帶有移位運(yùn)算的枚舉多用于同一個(gè)枚舉變量可以同時(shí)賦值多個(gè)枚舉成員的情況,其原理就是將各個(gè)枚舉值按位或(|),因?yàn)橐莆贿\(yùn)算的枚舉成員可以保證按位或(|)計(jì)算之后結(jié)果的唯一性,所以每種結(jié)果都能反向計(jì)算出是由哪幾個(gè)枚舉成員按位或(|)而成

  以"使用按位或(|)為枚舉變量test同時(shí)賦值枚舉成員TestA、TestB與TestC"為例

  Test test = TestA | TestB;test |= TestC;

  以"使用按位異或(^)為枚舉變量test去掉一個(gè)枚舉成員TestC"為例

  Test test = TestA | TestB | TestC;test ^= TestC;

  注: 如果枚舉變量test本身并未賦值TestC,那么使用按位異或(^)會(huì)為枚舉變量test多賦值一個(gè)枚舉成員TestC

  以"使用按位與(&)判斷枚舉變量test是否賦值了枚舉成員TestA"為例

  Test test = TestA | TestB;if (test & TestA){ NSLog(@"yes");}else{ NSLog(@"no");}

  總結(jié)

  以上就是這篇文章的全部?jī)?nèi)容了,希望能對(duì)大家的學(xué)習(xí)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

【iOS開(kāi)發(fā)之枚舉用法使用】相關(guān)文章:

IOS7新功能Airdrop使用教程03-22

ios開(kāi)發(fā)用Charles進(jìn)行抓包的方法04-22

ios7八門(mén)神器怎么使用06-04

iOS7.0.6如何正確維護(hù)和使用電池04-12

中餐餐具之使用禮儀06-06

中餐禮儀之餐具的使用06-10

ios7.1.2怎么升級(jí)ios803-18

空調(diào)使用省電實(shí)用法則04-29

ios7如何降級(jí)到ios604-28

ios7降低到ios6的方法03-18