iOS - OC Enum 枚举
前言
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 枚举的更多相关文章
- iOS - Swift Enum 枚举
1.Enum 的创建 1.1 标准定义 枚举的定义 enum CompassPoint { case North case South case East case West } enum Plane ...
- iOS - OC Foundation 框架
前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...
- Swift Enum 枚举
前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- C#将Enum枚举映射到文本字符串
介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
- 161208、Java enum 枚举还可以这么用
在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
随机推荐
- 在Linux下搭建Git服务器的方法是什么样?
第一步 安装git:可以通过命令的方式快速安装,不同的linux的安装方法可能不一样,我的是采用的yum方法.ubuntu可以用apt-get命令.sudo yum install git 第二步 添 ...
- js作用域链与this
this的绑定与function和对象的定义位置无关,是由函数调用时的执行环境所决定的. scope chain是由函数定义时的位置决定的与函数调用时的执行环境无关.
- hdwiki model目录下的函数类
model目录下的函数类 actions.class.php(站内地图相关) getHTML:获得页面菜单和相关信息 getMap:生成站内地图 adv.class.php 对wiki_adve ...
- python中split函数的使用
最近学习python,对split函数做了下总结,内容如下:
- JavaScript脚本语言基础(三)
导读: 数学对象(Math) 数组对象(Array) 字符串对象(String) 日期对象(Date) js对象是属性和方法的集合.JavaScript中的所有事物都是对象,如:字符串.数值.数组.函 ...
- HttpClient的使用方法
使用httpClient发送请求.接收响应很简单.一般需要以下几个步骤. 第一:创建HttpClient对象: 第二:创建请求方法的实例,并指定请求URL.如果要发送GET请求,创建HttpGet对象 ...
- 20150618_Andriod _set Dialog_弹出式菜单
参考地址: http://blog.csdn.net/zhyl8157121/article/details/8169172 http://blog.csdn.ne ...
- Gift Hunting(分组背包)
Gift Hunting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 分页sql存储过程算法
/****** Object: StoredProcedure [dbo].[PRO_Pub_FenYe] Script Date: 08/04/2014 11:14:22 ******/ SET A ...
- 线程池原理及创建(C++实现)
http://www.cnblogs.com/lidabo/p/3328402.html 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关.另外 ...