码迷,mamicode.com
首页 > 移动开发 > 详细

iOS枚举的运用

时间:2017-08-16 19:12:46      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:class   feed   integer   多个   输出   区别   cat   十六进制   0x03   

1.什么是枚举?

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

2.iOS中枚举的使用

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

   

   下面我们定义一个枚举类型Animal,形式为 enum 枚举名{ 枚举值表 };   我们在名为Animal的枚举中申明了多个成员名,我们可以看作是整形常量的别名。我们把cat赋值为1,系统会

   默认为后续枚举成员的值在前一个成员上加1。当然枚举成员的值我们也可以自定义,例如我们可以为cat赋值为50,dog赋值为100,所有的赋值关键就是让编程人员容易读懂和理解。

  • enum:关键字用于声明枚举
  • 在枚举中不能出现同名的枚举成员和枚举类型     
//枚举类型的定义
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类型的变量

 


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

  • NS_ENUM声明一般类型, NS_OPTIONS声明掩码(bitmasked)类型  

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

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

  好处:我们在枚举值中看见<<那我们就可以通过|(位运算符:或)进行组合!如:下面黄色标注的赋值语句。

//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,以此类推。

 

  用NS_ENUM声明一般类型,下面声明了两种枚举类型,类型成员分别赋值十进制数和十六进制数。

  为什么要用两种不同的方式呢?本质上这两种方式并没有什么区别,但是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

iOS枚举的运用

标签:class   feed   integer   多个   输出   区别   cat   十六进制   0x03   

原文地址:http://www.cnblogs.com/spongebob/p/7374876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!