前言

  • iOS 5.0 之后,提供了新的枚举定义方式,定义枚举的同时,可以指定枚举中数据的类型。

    	typedef NS_OPTIONS(_type, _name) new;   -> 位移的,可以使用 按位或 设置数值
    typedef NS_ENUM(_type, _name) new; -> 数字的,直接使用枚举设置数值
  • 位移型枚举:

    • 使用 按位或 可以给一个参数同时设置多个 "类型"。在具体执行的时候,使用 按位与 可以判断具体的 "类型"。
    • OC 中 64 位操作系统 NSInteger 64 位 - long => 能够表示 64 种选项。通过位移设置,就能够得到非常多的组合。
    • 对于位移枚举类型,如果传入 0,表示什么附加操作都不做!=> 执行效率是最高的。如果开发中,看到位移的枚举,同时不要做任何的附加操作,参数可以直接输入 0!

1、枚举的定义

1.1 C 样式枚举定义

  • 定义枚举类型

    	/*
    typedef enum new; new:枚举类型的变量值列表 C 样式的枚举默认枚举类型变量值的格式为整型
    */ typedef enum { AA,
    BB,
    CC } Name;
  • 判断枚举值

        - (void)studentWithName:(Name)name {
    
            switch (name) {
    
                case 0:
    
                    NSLog(@"AA");
    break; case 1: NSLog(@"BB");
    break; case 2: NSLog(@"CC");
    break; default:
    break;
    }
    }
  • 设置枚举的值

    	[self studentWithName:1];
    
      	[self studentWithName:CC];

1.2 数字型枚举定义

  • 定义枚举类型

    	/*
    typedef NS_ENUM(_type, _name) new; _type:枚举类型变量值的格式
    _name:枚举类型的名字
    new:枚举类型的变量值列表
    */ typedef NS_ENUM(NSUInteger, Seasons) { spring = 0,
    summer,
    autumn,
    winter
    };
  • 判断枚举值

    	- (void)selectWithSeasons:(Seasons)seasons {
    
    		if (seasons == 1 || seasons == 2) {
    
    			NSLog(@"comfortable");
    
    		} else {
    
    			NSLog(@"cold");
    }
    }
  • 设置枚举的值

    	[self selectWithSeasons:0];
    
    	[self selectWithSeasons:autumn];

1.3 位移型枚举定义

  • 定义枚举类型

    	/*
    typedef NS_OPTIONS(_type, _name) new; _type:枚举类型变量值的格式
    _name:枚举类型的名字
    new:枚举类型的变量值列表 位移的枚举判断不能使用 else,否则会丢选项
    */ typedef NS_OPTIONS(NSUInteger, ActionTypeOptions) { ActionTypeTop = 1 << 0,
    ActionTypeBottom = 1 << 1,
    ActionTypeLeft = 1 << 2,
    ActionTypeRight = 1 << 3
    };
  • 判断枚举值

    	- (void)movedWithActionType:(ActionTypeOptions)type {
    
    		if (type == 0) {
    return;
    } if (type & ActionTypeTop) {
    NSLog(@"上 %li", type & ActionTypeTop);
    }
    if (type & ActionTypeBottom) {
    NSLog(@"下 %li", type & ActionTypeBottom);
    }
    if (type & ActionTypeLeft) {
    NSLog(@"左 %li", type & ActionTypeLeft);
    }
    if (type & ActionTypeRight) {
    NSLog(@"右 %li", type & ActionTypeRight);
    }
    }
  • 设置枚举的值

    	[self movedWithActionType:0];
    
    	[self movedWithActionType:ActionTypeLeft | ActionTypeTop | ActionTypeBottom | ActionTypeRight];

iOS - OC Enum 枚举的更多相关文章

  1. iOS - Swift Enum 枚举

    1.Enum 的创建 1.1 标准定义 枚举的定义 enum CompassPoint { case North case South case East case West } enum Plane ...

  2. iOS - OC Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...

  3. Swift Enum 枚举

    前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...

  4. c# (ENUM)枚举组合类型的谷歌序列化Protobuf

    c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...

  5. C#将Enum枚举映射到文本字符串

    介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...

  6. MVC3不能正确识别JSON中的Enum枚举值

    一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...

  7. 161208、Java enum 枚举还可以这么用

    在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...

  8. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  9. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

随机推荐

  1. java网络编程之TCP通讯

    java中的网络编程之TCP协议的详细介绍,以及如何使用,同时我在下面举2例说明如何搭配IO流进行操作, /* *TCP *建立连接,形成传输数据的通道: *在连接中进行大数据量传输: *通过三次握手 ...

  2. iOS 开发 证书总结 开发证书和生产证书的区别

    IOS开发 证书总结 开发者证书   ------>>  开发证书是你在真机推送时 用得, 生产证书是app 上架之后 推送给用户用的 首先你必须获得apple开发者证书,上图这个文件就是 ...

  3. PHP序列化以及反序列化系列[1]--PHP序列化格式的写法

    反序列化:对单一的已序列化的变量进行操作,将其转换回 PHP 的值(zval). PHP序列化方式 PHP在序列化的时候会将相应的变量以对应的键值进行储存. 将一个类序列化的话,处理代码主要的 文件: ...

  4. mysql转换引擎的方法

    有很多方法可以将表的存储引擎转换成另外一种引擎,每种方法都各有优缺点: A:alter table 将表从一个引擎直接改为另外一个引擎最简单的办法 alter table tb_name engine ...

  5. python :生产者和消费者模型 即简单的协程

    def consumer(name): print('%s开始准备吃包子了' %name) while True: baozi=yield print('[%s]包子来了,被[%s]吃了' %(bao ...

  6. 在ubuntu上搭建turnserver

    这边文章的目的:搭建turnserver,设定开机启动 1.下载turnserver的源码,最新的地址https://code.google.com/p/rfc5766-turn-server/ no ...

  7. 关于childNodes的length的问题

    <ul id="ul1"> <li></li> <li></li> </ul> 这个时候如果 documen ...

  8. 关于easyui的窗口和tab页面不执行js说明

    一直以来群里里面很多人反应,在用tab加载界面的时候,界面里面的js不会执行.今天GodSon在此说明一下原因. 不管是window,dailog还是tab其实质最终都是继承了panel.panel有 ...

  9. MySQL 及 SQL 注入

    如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符. 所谓SQL注入,就是 ...

  10. Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity) 转

    硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能.现在的服务器上动不动就是多 CPU 多核. ...