iOS 高级开发技巧 1.熟悉Objective-C (五) 用枚举表示状态、选项、状态码
来源:互联网 发布:java编程实例及讲解 编辑:程序博客网 时间:2024/06/13 09:22
用枚举表示状态、选项、状态码
前面说过一个问题就是objective-c是基于c语言的,所以c语言有的功能它都有。
其中之一就是枚举:enum
在系统中我们使用过很多这样的类型,比如:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonType 就是一个枚举,它的定义是这样的:
typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = 0, // no button type UIButtonTypeSystem NS_ENUM_AVAILABLE_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 好搭档!
0 0
- iOS 高级开发技巧 1.熟悉Objective-C (五) 用枚举表示状态、选项、状态码
- Effective Objective-C 2.0 第5条:用枚举表示状态、选项、状态码
- ios用枚举表示状态,选项,状态码
- 《Effective Objective-C 2.0》3、枚举类型表示状态、选项
- 枚举表示状态,选项,状态码
- iOS 高级开发技巧 1.熟悉Objective-C (一) 了解Objective-C语言的起源
- iOS 高级开发技巧 1.熟悉Objective-C (三) 多用字面量语法
- iOS 高级开发技巧 1.熟悉Objective-C (四) 多用类型常量 少用#define预处理命令
- iOS 高级开发技巧 1.熟悉Objective-C (二) 在类的头文件中尽量少引入其他头文件
- Objective C--状态模式
- Objective C 状态模式
- iOS开发技巧:设置状态样式
- hdu 3935 -枚举+位运算表示状态和状态转移
- objective-c检测网络状态
- iOS/Objective-C开发 枚举(Enum)的使用
- 设计技巧26:状态模式 State 用类来表示一个状态
- iOS开发——app的五种生命周期状态
- iOS 高级开发技巧
- 我是内闭型思考者。-11月有感
- 1.2 ASP.NET_入门_提交表单 p1
- Leetcode_13_Roman to Integer
- POJ-1211Traffic Lights
- 第13周项目 例1.3 输出平均成绩及优秀人数,不及格人数
- iOS 高级开发技巧 1.熟悉Objective-C (五) 用枚举表示状态、选项、状态码
- nodejs常用模块async(waterfall,each,eachSeries,whilst)
- OC基础总结
- 递归算法
- Android系统Recovery工作原理之使用update.zip升级过程分析
- 移动游戏开发(二)
- c++ list
- 生命周期——fragement、Activity
- gravity与layout_gravity的区别