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 ...
随机推荐
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.5.SportsStore一个真实的程序
我们要建造的程序不是一个浅显的例子.我们要创建一个坚固的,现实的程序,坚持使它成为最佳实践.与Web Form中拖控件不同.一开始投入MVC程序付出利息,它给我们可维护的,可扩展的,有单元测试卓越支持 ...
- FTPS加密上传
公司要求ftp接口不能以明文方式传输,所以adc系统将增加ftps方式 但是在网找了很多方式都无法实现用了方法一 FtpWebRequest request = (FtpWebRequest)WebR ...
- jstl和jsp脚本变量相互访问
1.jsp脚本访问jstl标准动作的变量,可以通过隐式的范围变量来获取,对于页面作用域的变量,可以通过pageContext.getAttribute()来获取,也可以通过动作来获取: <c:s ...
- HDU 4405:Aeroplane chess(概率DP入门)
http://acm.split.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Problem Description Hzz loves ...
- mysql高可用之PXC(Percona XtraDB Cluster)
简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交 ...
- Android中的图片压缩
1.android中计算图片占用堆内存的kB大小跟图片本身的kB大小无关,而是根据图片的尺寸来计算的. 比如一张 480*320大小的图片占用的堆内存大小为: 480*320*4/1024=600kB ...
- webrtc - web 应用相关网站
很有意思的网站 http://io13webrtc.appspot.com/#1 html5使用webrtc简介 http://www.html5rocks.com/en/tutorials/getu ...
- linux内核2.4.x网络接口分析层次图
http://blog.csdn.net/wswifth/article/details/5108744 今天大概分写了下<Linux内核2.4.x的网络接口源码的结构[转]>中的结构层次 ...
- JAVA基础知识之JVM-——动态代理(AOP)
代理模式简介 在很多场景下,我们想使用一个类(通常是接口)A时,并不是直接使用这个类,而是通过另外一个类B去调用A的方法,这里的类B就是一个代理类. 有很多场景都会用到这种方法,例如假如创建类A需要很 ...
- volatile关键字解析
转载:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受 ...