iOS 高级开发技巧 1.熟悉Objective-C (五) 用枚举表示状态、选项、状态码
2014-11-25 18:49
525 查看
用枚举表示状态、选项、状态码
前面说过一个问题就是objective-c是基于c语言的,所以c语言有的功能它都有。
其中之一就是枚举:enum
在系统中我们使用过很多这样的类型,比如:
UIButtonType 就是一个枚举,它的定义是这样的:
————————————————分割线——————————————————————
枚举我们在什么时候使用比较好呢?
举个栗子吧,比如我们在做一个快递状态的区分的时候,也许文档中会说明:
status = 0 代表没有查到 、1 代表已入库、2 代表已出库、3 代表正在运送中、 4 代表已签收
在编码初期,我们也许会在传送这个状态的时候用01234传送
如果你知道 #define 预处理命令 或者 类型常量, 也许你会定义这样的来写。
可是这些都不是最好的,从写代码的意义来说,前面的两种方式都不是最能让人一眼看出的
这个时候就用到enum 枚举了。
c语言的枚举就不说了,有兴趣的孩子可以去google看看相关资料,它用起来比较(注意!仅仅是比较)麻烦。
oc 使用宏定义将其简化了:
像上面这样的方式就可以定义一个枚举了。可以用如下方式定义。
当然也可以直接使用:
当然,这样的定义是在每一个状态是两两独立的情况下
例如一件快递不会即是已入库又是正在运送中的状态。
但是某些时候的状态不一定是这样的,比如一个程序员掌握的技术
可以有C,C++,Objective-C,PHP,Ruby等。这个不是单一的,一个程序员这些东西都会也不是件稀奇的事情。
我们可以用枚举来确定这些东西。
当然我们如何使用它呢?比如我们做一个面试代码,如果一个程序员会C、C++、objective-c,那么就录用:
介绍一种巧妙的东西,就是switch与这个合体!!
打完收工!
要点
- 应该用枚举来表示状态机的状态、传递给方法的区分选项以及状态等值,记得给他们起个容易理解的名字。
- switch + enum 好搭档!
前面说过一个问题就是objective-c是基于c语言的,所以c语言有的功能它都有。
其中之一就是枚举:enum
在系统中我们使用过很多这样的类型,比如:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonType 就是一个枚举,它的定义是这样的:
typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = 0, // no button type UIButtonTypeSystem NS_ENUM_***AILABLE_IOS(7_0), // standard system button UIButtonTypeDetailDisclosure, UIButtonTypeInfoLight, UIButtonTypeInfoDark, UIButtonTypeContactAdd, UIButtonTypeRoundedRect = UIButtonTypeSystem, // Deprecated, use UIButtonTypeSystem instead };
————————————————分割线——————————————————————
枚举我们在什么时候使用比较好呢?
举个栗子吧,比如我们在做一个快递状态的区分的时候,也许文档中会说明:
status = 0 代表没有查到 、1 代表已入库、2 代表已出库、3 代表正在运送中、 4 代表已签收
在编码初期,我们也许会在传送这个状态的时候用01234传送
如果你知道 #define 预处理命令 或者 类型常量, 也许你会定义这样的来写。
可是这些都不是最好的,从写代码的意义来说,前面的两种方式都不是最能让人一眼看出的
这个时候就用到enum 枚举了。
c语言的枚举就不说了,有兴趣的孩子可以去google看看相关资料,它用起来比较(注意!仅仅是比较)麻烦。
oc 使用宏定义将其简化了:
//快递状态 typedef NS_ENUM(int, MailSendStatus){ MailSendStatusNotFound = 0, //没有查到 MailSendStatusInStore = 1, //已入库 MailSendStatusOutStore = 2, //已出库 MailSendStatusSending = 3, //正在运送中 MailSendStatusReceived = 4, //已签收 };
像上面这样的方式就可以定义一个枚举了。可以用如下方式定义。
MailSendStatus status = MailSendStatusSending;
当然也可以直接使用:
if (MailSendStatusSending){ //bulabulabulabula.... }
当然,这样的定义是在每一个状态是两两独立的情况下
例如一件快递不会即是已入库又是正在运送中的状态。
但是某些时候的状态不一定是这样的,比如一个程序员掌握的技术
可以有C,C++,Objective-C,PHP,Ruby等。这个不是单一的,一个程序员这些东西都会也不是件稀奇的事情。
我们可以用枚举来确定这些东西。
//程序员掌握的技能 NS_OPTIONS(NSUInteger, ProgrammerSkill){ ProgrammerSkillC = 1<< 0, ProgrammerSkillCPlus = 1 << 1, ProgrammerSkillObjectiveC = 1 << 2, ProgrammerSkillPHP = 1 << 3, ProgrammerSkillRuby = 1 << 4 }
当然我们如何使用它呢?比如我们做一个面试代码,如果一个程序员会C、C++、objective-c,那么就录用:
ProgrammerSkill skill = ProgrammerSkillC | ProgrammerSkillCPlus | ProgrammerSkillObjectiveC; if (yourSkill == skill){ //bulabulabula.... }
介绍一种巧妙的东西,就是switch与这个合体!!
ProgrammerSkill skill; switch (skill) { ProgrammerSkillC: break; ProgrammerSkillObjective: break; ProgrammerSkillPHP: break; ProgrammerSkillRuby: break; case ProgrammerSkillC | ProgrammerSkillCPlus | ProgrammerSkillObjectiveC: //就是你了!! break; default: break; }
打完收工!
要点
- 应该用枚举来表示状态机的状态、传递给方法的区分选项以及状态等值,记得给他们起个容易理解的名字。
- switch + enum 好搭档!
相关文章推荐
- iOS 高级开发技巧 1.熟悉Objective-C (一) 了解Objective-C语言的起源
- iOS 高级开发技巧 1.熟悉Objective-C (三) 多用字面量语法
- iOS 高级开发技巧 1.熟悉Objective-C (四) 多用类型常量 少用#define预处理命令
- ios用枚举表示状态,选项,状态码
- Effective Objective-C 2.0 第5条:用枚举表示状态、选项、状态码
- iOS 高级开发技巧 1.熟悉Objective-C (二) 在类的头文件中尽量少引入其他头文件
- 枚举表示状态,选项,状态码
- Effective Objective-C 2.0 — 第五条用枚举表示状态、选项、状态码 (未看完)
- iOS开发技巧:设置状态样式
- 2015 Objective-C 三大新特性 不可错过的iOS开发技巧
- iOS开发高级技巧-运行时属性runtime attribute设置视图圆角
- iOS开发CoreAnimation解读之五——高级动画技巧
- Objective-C(十二、快速枚举,枚举器NSEnumerator和集合类NSSet)——iOS开发基础
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
- 盘点一些iOS开发技巧:Swift和Objective-C
- iOS开发技巧:使用Objective-C创建UUID
- 工作记录二:iOS开发工具CocoaPods(objective-c第三方库管理工具)实用技巧
- [iOS开发技巧之]Objective-C中单例类的声明
- iOS 高级开发技巧
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式