欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開發(fā)之枚舉用法小結(jié)

 更新時(shí)間:2016年09月29日 11:22:36   作者:蚊香醬  
大家都知道枚舉是C語(yǔ)言中的一種基本數(shù)據(jù)類型,是一個(gè)"被命名的整型常量"的集合,它不參與內(nèi)存的占用和釋放,我們?cè)陂_發(fā)中使用枚舉的目的只有一個(gè),那就是為了增加代碼的可讀性。下面就來(lái)來(lái)看看在iOS中枚舉的用法,有需要的朋友們可以看看。

前言

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

舉個(gè)例子,我們想要在開發(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ǔ)言中定義枚舉類型的方式如下

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

以"定義一個(gè)枚舉名稱為Test,擁有TestA、TestB等枚舉成員的枚舉類型"為例,定義方式如下

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

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

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

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

enum 枚舉名稱 枚舉變量 = 枚舉變量值;

以"創(chuàng)建一個(gè)枚舉名稱為Test的枚舉變量test,并為其賦值TestB"為例

enum Test test = TestB;

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

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

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

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

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

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)重新定義枚舉類型(即:NS_ENUM與NS_OPTIONS),這兩者在本質(zhì)上并沒(mé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)大家可以留言交流。

相關(guān)文章

  • 講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問(wèn)對(duì)象

    講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問(wèn)對(duì)象

    這篇文章主要介紹了講解Java中如何構(gòu)造內(nèi)部類對(duì)象以及訪問(wèn)對(duì)象,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • 一行iOS代碼實(shí)現(xiàn)圖片無(wú)限輪播器

    一行iOS代碼實(shí)現(xiàn)圖片無(wú)限輪播器

    一行iOS代碼實(shí)現(xiàn)圖片無(wú)限輪播器的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • iOS?Swift?Lazy?var?View失效問(wèn)題解決

    iOS?Swift?Lazy?var?View失效問(wèn)題解決

    這篇文章主要為大家介紹了iOS?Swift?Lazy?var?View失效問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 淺談Xcode9 和iOS11適配和特性

    淺談Xcode9 和iOS11適配和特性

    本篇文章主要介紹了Xcode9 和iOS11適配和特性,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • iOS?WKWebView秒開方案實(shí)戰(zhàn)記錄

    iOS?WKWebView秒開方案實(shí)戰(zhàn)記錄

    從iOS8開始,就引入了新的瀏覽器控件WKWebView,用于取代UIWebView,下面這篇文章主要給大家介紹了關(guān)于iOS?WKWebView秒開方案的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • IOS 時(shí)間和時(shí)間戳之間轉(zhuǎn)化示例

    IOS 時(shí)間和時(shí)間戳之間轉(zhuǎn)化示例

    我們經(jīng)常從服務(wù)器后臺(tái)拿到時(shí)間戳的時(shí)間,以下代碼可以實(shí)現(xiàn)將時(shí)間戳轉(zhuǎn)為可讀的時(shí)間格式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • iOS實(shí)現(xiàn)萌貨貓頭鷹登錄界面動(dòng)畫

    iOS實(shí)現(xiàn)萌貨貓頭鷹登錄界面動(dòng)畫

    本文介紹的動(dòng)畫效果仿自國(guó)外網(wǎng)站readme.io的登錄界面,超萌可愛(ài)的貓頭鷹,感興趣的朋友們可以參考學(xué)習(xí)。
    2016-08-08
  • iOS瀑布流的簡(jiǎn)單實(shí)現(xiàn)(Swift)

    iOS瀑布流的簡(jiǎn)單實(shí)現(xiàn)(Swift)

    這篇文章主要介紹了iOS瀑布流的簡(jiǎn)單實(shí)現(xiàn),說(shuō)到瀑布流, 或許大家都不陌生, 瀑布流的實(shí)現(xiàn)也有很多種! 本文使用兩種方法介紹,有興趣的可以了解一下。
    2016-11-11
  • IOS獲取各種文件目錄路徑的方法

    IOS獲取各種文件目錄路徑的方法

    ios獲取文件路徑的方法,iphone沙箱模型的四個(gè)文件夾,通過(guò)documents,tmp,app,Library得到模擬器路徑的簡(jiǎn)單方式,下面小編整理相關(guān)資料,把IOS獲取各種文件目錄路徑的方式總結(jié)如下,需要的朋友可以參考下
    2015-08-08
  • IOS利用CocoaHttpServer搭建手機(jī)本地服務(wù)器

    IOS利用CocoaHttpServer搭建手機(jī)本地服務(wù)器

    這篇文章主要介紹了IOS利用CocoaHttpServer搭建手機(jī)本地服務(wù)器的步驟,幫助大家更好的理解和學(xué)習(xí)使用ios開發(fā),感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論