官术网_书友最值得收藏!

2.13 枚舉

接下來(lái),我們思考一個(gè)簡(jiǎn)單點(diǎn)的問(wèn)題,對(duì)于數(shù)值數(shù)據(jù)可以使用整數(shù)或浮點(diǎn)數(shù),對(duì)于“開/關(guān)”類數(shù)據(jù)可以使用布爾型,對(duì)于文本信息可以使用字符或字符串,那么,對(duì)于性別這樣的數(shù)據(jù),使用什么數(shù)據(jù)類型比較合適呢?

想正確地處理一類數(shù)據(jù),就必須清楚這類數(shù)據(jù)的值可能有哪些?就說(shuō)性別吧,大家都知道,包括男和女。不過(guò),還有一種情況,如果有人想對(duì)自己的性別保密呢?好吧,那性別數(shù)據(jù)就有可能有三種基本的數(shù)值了,包括:保密、男和女。

那么,我們使用什么類型保存性別數(shù)據(jù)呢?理論上講會(huì)有很多方案,比如,使用宏,如下面的代碼。

    #define SEX_UNKNOW 0
    #define SEX_MALE 1
    #define SEX_FEMALE 2

或者定義常量,如下面的代碼。

    const int SexUnknow = 0;
    const int SexMale = 1;
    const int SexFemale = 2;

不過(guò),如果能夠定義一個(gè)性別類型是不是會(huì)更加直觀呢?好的,我們馬上使用enum關(guān)鍵字定義枚舉類型,如下面的代碼就定義了一個(gè)性別枚舉類型。

    enum ESex {Unknow, Male, Female};

然后,我們使用如下代碼來(lái)使用這個(gè)類型。

    enum ESex tomSex = Male;

我們可以看到,在定義性別類型的變量時(shí),同樣使用了enum關(guān)鍵字。不過(guò),為了更方便地使用枚舉類型,我們也可以使用typedef關(guān)鍵字定義它的別名。此時(shí),我們可以單獨(dú)定義,也可以在定義ESex枚舉類型時(shí)直接定義。

    typedef enum ESex Sex;

或:

    typedef enum ESex {Unknow, Male, Female} Sex;

然后,我可以直接使用Sex類型來(lái)定義變量。

    Sex tomSex = Male;
    NSLog(@"%i", tomSex);

當(dāng)我們需要顯示枚舉變量(如tomSex)的值時(shí),只能使用整數(shù)來(lái)顯示,其中,枚舉類型中定義的第一個(gè)成員值為0,第二個(gè)成員值為1,第三個(gè)成員值為2,以此類推。當(dāng)然,如果需要自己指定枚舉成員的值也是可以的,如下面的代碼。

    typedef enum ESex {Unknow = 0, Male = 1, Female = 2} Sex;

此外,枚舉成員的值也可以不從0開始,但我們并不建議這樣使用,除非項(xiàng)目中的數(shù)據(jù)真的不允許為0。如下面定義的太空門枚舉類型。

    typedef enum ESpaceGate  {
    EarthGate = 300,
    MoonGate = 301,
    MarsGate = 400,
    PlanetIGate = 9000
    } SpaceGate;

最后,在使用枚舉類型時(shí)應(yīng)注意一些問(wèn)題:

? 總是保留一個(gè)未知(Unknow)的枚舉項(xiàng)是一種安全措施,這樣可以保證在任何時(shí)候都能夠處理意外數(shù)據(jù),比如,突然出現(xiàn)了一個(gè)可以到達(dá)異次元空間的太空門,或者真的出現(xiàn)了雌雄同體。

? 在Objective-C中的枚舉值是整數(shù),如果需要保存到文件或數(shù)據(jù)庫(kù)中,應(yīng)使用整數(shù)類型。

主站蜘蛛池模板: 元谋县| 贡嘎县| 合水县| 红安县| 万载县| 阿尔山市| 手游| 固始县| 本溪市| 宜都市| 中西区| 镇坪县| 葫芦岛市| 平利县| 喀喇| 平湖市| 佛教| 海阳市| 会同县| 汝州市| 古田县| 昌邑市| 沧源| 桂东县| 梁山县| 桃园县| 陇南市| 乌审旗| 浦东新区| 康保县| 福建省| 孙吴县| 卓资县| 云林县| 易门县| 图们市| 吕梁市| 共和县| 那曲县| 惠来县| 盐山县|