IOS 枚举 enum
前言:oc中枚举的正确使用,可以增强代码的可读性,减少各种“错误”,让代码更加的规范。下面先介绍枚举的用法,最后介绍个人对枚举的理解,什么是枚举,为什么用枚举。
一. OC中,枚举的使用
1. 写法1格式:关键字 enum 枚举名字{枚举成员,枚举成员2};
/*
* 枚举 可以写在@interface 里面
**/
enum Test{
test = ,
test1 = ,
};
使用方法:enum 枚举名称 变量名称 = 枚举成员。
enum Test var = test;
NSLog(@"%u", var);
// 输出值为 1
注意:如果枚举成员不设置值,默认第一个枚举成员值为整型0,后续枚举成员值依次加1。
2.写法2格式,typedef enum 枚举名称{枚举成员}枚举别名;
/*
定义'枚举类型', Test11 是属性类型 相当于nsstring,int,。。
其中Test1 枚举名字可以省略不写,称“匿名枚举”
**/
typedef enum Test1{
test11 = ,
test12 = ,
}Test11;
使用方法:属性类型 变量名称 = 枚举成员;
Test11 var1 = test12;
NSLog(@"%u", var1);
// 输出值为 2
注意:typedef enum 定义的枚举,可以理解为枚举类型,相当于nsstring,int等,可用属性类型直接创建变量,然后完成赋值。
这种写法原有的枚举名称可以省略,称“匿名枚举”。
3.写法3,ios6之后,也是最标准的写法,更加的统一,规范。用“NS_ENUM”和“NS_OPTIONS”定义
格式:typedef NS_ENUM(存储类型,属性类型){枚举成员};
/*
* 存储类型,表示成员变量的值类型,如NSInteger
* 属性类型,上文说到的 枚举别名,可以此名称调用枚举
* 其中 NS_ENUM 多用于一般枚举,NS_OPTIONS 多用于位移枚举
**/
typedef NS_ENUM(NSInteger,Test6){
test61 = ,
test62 = ,
}; typedef NS_OPTIONS(NSUInteger, Test7) {
TestNone = ,
TestA7 = << ,
TestB7 = << ,
TestC7 = << ,
TestD7 = <<
};
使用方法:属性别名 变量名称 = 枚举成员;
Test6 var6 = test62;
NSLog(@"%ld", (long)var6);
// 输出值为 2 Test7 var7 = TestA7 | TestC7;
NSLog(@"%ld", (long)var7);
// 输出值为 5
// 0001 | 0100 = 0101 十进制为5
注意:上面TestC7 1<<2,表示2进制1 左移2位,为0100,与0001 或运算,得到0101,转换十进制为5.
常用枚举用 NS_ENUM,NS_OPTIONS 多用于位移枚举,位的运算(或且非异或等)
二. 枚举错误的写法,编译时不会报错,但是运行报错
//错误写法1
enum {
test21 = ,
test22 = ,
}Test2; //错误写法2
NS_ENUM(NSInteger,Test3){
test31 = ,
test32 = ,
}; //错误写法3
NS_OPTIONS(NSUInteger, Test4){
test41 = ,
test42 = ,
}; NS_OPTIONS(NSUInteger, Test5) {
TestA = << ,
TestB = << ,
TestC = << ,
TestD = <<
};
三. 枚举的理解
1.oc是基于c语言的,在c语言中枚举的定义
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
这样很繁琐,在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。
2.枚举用于规范的定义代码中的状态、选项等“常量”。
其中状态与选项的概念区别(states and options)
状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Error。
选项,同时可以有一种或一种以上,如App可以同时支持横屏和竖屏,横屏竖屏在这个时候就是“屏幕方向”的两种不同的选项。
总结:
个人觉得枚举还是有必要掌握的,格式清晰,使用简便。能减少代码的冗余度,提高代码规范,增强可读性.
ps:第一次总结,有错误之处还请指正,thanks,荆轲刺秦王~~
参考文档1:https://www.cnblogs.com/JCSU/articles/1299051.html
参考文档2:https://blog.csdn.net/snow_xuey/article/details/55258875
参考文档3:https://blog.csdn.net/imkata/article/details/78861077
IOS 枚举 enum的更多相关文章
- iOS 枚举ENUM和OPTIONS的区别
- iOS 枚举 初体验
iOS枚举 我的code /*文件名 SC_CDV_OCR.m*/ typedef enum _OCRResultState { OCRResultStateOK = 1, OCRResultStat ...
- MySQL字段之集合(set)枚举(enum)
MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it 分类:MySQL 集合 SET mysql> create table jihe(f1 ...
- 枚举 enum
typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...
- 枚举enum学习小记
参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- Python 枚举 enum
Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- 枚举Enum和常量0之间的恩怨
1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...
随机推荐
- linux 共享目录
1. 文件上传遇到多物理机多实例时,怎么处理呢? ftp, 文件同步, 目录共享 这里用目录共享来一把. 2. 操作流程 物理机两台 192.168.1.88 192.168.1.166 2.1 服 ...
- C#开发小技巧
001.判断一个Form是否已关闭并释放,需要从引用和对象两方面来判断,判断引用是否为null:mainfm==null判断引用的对象是否已释放:mainfm.IsDisposedMainFormma ...
- 申请单位iOS开发者账号
没有AppleID的需要先申请:此处略过: 1.登录苹果开发者官网(https://developer.apple.com),网速比较慢,多试几次 2. 点击 Enroll 切换到 简体中文 我以下述 ...
- 解决MFC对话框类不能建立成功的方法(出现unable to open the files XX for class XX)
原文:http://blog.163.com/wangqi1973_off/blog/static/131034571201011885546230 为新加的对话框资源添加新类,类名取做CColorV ...
- Qt 资料大全
https://blog.csdn.net/liang19890820/article/details/51752029 简述 发福利了.发福利了.发福利了,重要的事情说三遍... 为了方便更多Qte ...
- sql优化1
1.mysql里面的索引 对于 like关键字匹配查询,适用于like name%,但是不适用于%name%;添加索引时候注意这点 2.mysql的limit分页 ,limit 2,5;表示每页显示5 ...
- 如何使用idea把web项目打成war包
如果是maven项目,打成war包很容易,如果是web项目,需要这样子 1. 2. 3. output directory是war包的目录 4.重新选择 第一步的操作,选择build即可.
- SQL计算上下两行某列的差
SELECT * FROM #TempHuDong SELECT * FROM #TempHuDong SELECT TOP 1 ABS(a.num -b.num) '差' FROM (select ...
- WCF安全 z
WCF custom authentication using ServiceCredentials The generally accepted way of authenticating a us ...
- angular2 应用 不同的environment 进行 build/serve
文件目录如下: 命令行使用:ng serve --e=dev/offline/prod build 不同,像上面那样写没用.必须后面再加--prod 如: ng build --e=offline - ...