zoukankan      html  css  js  c++  java
  • iOS枚举的运用

    1.什么是枚举?

    1.什么是枚举?

    枚举其实就是一个整型常数的集合,最简单的例子就是表示星期的SUN, MON, TUE, WED, THU, FRI,SAT, 就是一个枚举。

    2.iOS中枚举的使用

    在ObjC中可以使用C语言的方式进行枚举,其实ObjC的枚举就是在C语言上演化而来,先了解C语言定义一个枚举的方式有助于我们对枚举的理解。

    1.C语言中的枚举(ObjC兼容)

    下面我们定义一个枚举类型Animal,形式为 enum 枚举名 {枚举值表} ;   我们在名为Animal的枚举中申明了多个成员名,我们可以看作是整形常量的别名。我们把cat赋值为1,系统会默认为后续枚举成员的值在前一个成员上加1,如dog为2,pig为3以此类推。当然枚举成员的值我们也可以自定义,例如我们可以为cat赋值为50,dog赋值为100,所有的赋值关键就是让编程人员容易读懂和理解。

    //枚举类型的定义
    enum Animal
    {
    	cat=1, dog, pig, bee, monkey, elephant , butterfly
    };
    enum Animal animal = cat;//声明Animal枚举型的枚举变量
    

    我们也可以同时声明枚举类型和枚举型变量,下面第一种定义方式没有定义枚举的类型,但是声明了枚举变量workday。  第二中分别定义了枚举类型enum week和变量days。

    //类型定义与变量声明同时进行
    enum //跟第一个定义不同的是,此处的类型标号省略,这是允许的。
    {
        saturday,
        sunday = 0,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    } workday; //变量workday
    enum week { Mon=1, Tue, Wed, Thu, Fri ,Sat, Sun} days; //变量days的类型为枚举型enum week
    

    用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明,下面例子中我们将enum Car定义成别名Car。

    typedef enum Car
    {
        //以下是枚举成员
        BMW = 0,
        Benz,
        Ferrari,
        Royce
    }Car;//枚举名称
    Car  car;//声明Car类型的变量
    typedef enum    //可以省略enum Car中的Car
    {
        //以下是枚举成员
        BMW = 0,
        Benz,
        Ferrari,
        Royce
    }Car;//枚举名称
    Car  car;//声明Car类型的变量
    

    2.iOS中的枚举

    在iOS中主要苹果推荐用NSENUM,NSOPTIONS 两种方式去声明一个枚举。

    • NSENUM声明一般类型, NSOPTIONS声明掩码(bitmasked)类型  

    下面使用NSOPTIONS掩码类型进行声明枚举,形式为 typedef NSOPTIONS(枚举成员类型,枚举类型名称){枚举成员…};      

     "<<"是左移运算符,"1 << 0"表示1左移0位。在二进制中,左移意味着对应的十进制数乘2。

    好处:我们在枚举值中看见<<那我们就可以通过|(位运算符:或)进行组合!像下面定义的CatDaily一样

    //NS_OPTIONS:是用来声明位掩码(bitmasked)
    typedef NS_OPTIONS(NSInteger,MyCatEvent) {
        CatNone     = 0,
        CatWalk     = 1 << 0, // <<表示左移运算符 表示0001
        CatJump     = 1 << 1,
        CatBark     = 1 << 2,
        CatEat      = 1 << 3,
        CatSleep    = 1 << 4,
        CatDaily     = CatWalk | CatJump
    };
    

    通过&进行判断我们来看看输出结果如下图:

    我们可以看到我们定义的CatWalk值为1,CatJump为2,所以或运算的value值为3。在打印语句中,我们用value对所有的枚举成员进行与运算。我们可以通过输出的值来判断value。包含哪些枚举成员。结果为0表示不包含,结果为1对应catwalk,以此类推。

    用NSENUM声明一般类型,下面声明了两种枚举类型,类型成员分别赋值十进制数和十六进制数。为什么要用两种不同的方式呢?本质上这两种方式并没有什么区别,但是16进制的数更容易对转换到2进制,当我们需要对枚举成员做与、或运算时更加的方便。

    //NS_ENUM:是用来声明一般的NSInteger(下面代码使用NSInteger)类型的枚举
    typedef NS_ENUM(NSInteger,MyBoyEvent){
        BoyFeedCat  = 0,
        BoyWalkCat  = 1,
    };  
    //十六进制枚举
    typedef NS_ENUM(NSInteger,DailyEvent){
        DailyNone       = 0x00,
        DailyRead       = 0x01,
        DailyWrite      = 0x02,
        DailySing       = 0x03,
        DailyShopping   = 0x04,
    };
    

    以上如果有任何错误,希望大家指正。

    更多的iOS笔记可以来到我的博客:tianxianbob.com 交流

    参考链接:http://www.cnblogs.com/JCSU/articles/1299051.html

         http://www.jianshu.com/p/97e582fe89f3

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/spongebob/p/7374876.html
Copyright © 2011-2022 走看看