zoukankan      html  css  js  c++  java
  • iOS enum 定义与使用

    枚举其实很重要,特别是在应用开发初期,服务器端数据格式需要更改得情况下,枚举和宏都能是程序简洁,并且改动小。

    网上有个人写的言简意赅,适合初学

    转自:http://blog.csdn.net/ysy441088327/article/details/8012677

    题记: 蛋疼的枚举, 千万别小视了! 进入正题: 首先要知道的是,枚举值 它是一个整形(int) 并且,它不参加内存的占用和释放 枚举定义变量即可直接使用,不用初始化. 枚举的定义如下:

    typedef enum {

    //以下是枚举成员 TestA = 0,

        TestB,  

        TestC,  

        TestD 

    }Test;//枚举名称

    亦可以如下定义(推荐:结构比较清晰):

    typedef NS_ENUM(NSInteger, Test1) {

    //以下是枚举成员

        Test1A = 0,

        Test1B = 1,

        Test1C = 2,

        Test1D = 3

    };

    枚举的定义还支持位运算的方式定义,如下: 等于号后面必须等于1

    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个数字,无论你如何组合在一起,也不会产生两个同样的数字.

    多枚举值 赋值方式如下:

    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(@"没有"); }

    如果 没有包含,将返回0, 0表示false NO 则进入else 也可以随时为枚举变量累加某个值,但是要自己控制不要添加已经加入过的枚举值, 枚举变量的值不会有变动,但这样将会误导阅读代码的人

    有累加,自然有累减了,如果累减不存在的枚举值, 那么本次累减的枚举值,会自动累加上去.

     tes^= TestE;  

  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/ejllen/p/3745264.html
Copyright © 2011-2022 走看看