枚举 typedef enum NS_ENUM 认知

作者: 文扬_ | 来源:发表于2017-02-16 14:44 被阅读61次

前言

  在工作开发中经常会用到枚举,但是用的时候就直接找一个粘过来改一改,没有客观深刻的认识,今天通过《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》一书第五条,及网络的内容整理了枚举的相关知识。


了解枚举

  在学习枚举之前,我们要知道什么是枚举? 枚举是一种常量命名方式,只是用便于理解的值来表示常量,使代码易读。
一种写法:

typedef enum AttentionState {
    AttentionReport = 0, //观众点主播时类型
    AttentionSilent,     //主播点观众时类型
    AttentionBlank,      //自己点击自己时类型
    AttentionNormal,     //观众点击观众的情况
} AttentionState;

用的时候可以使用switch:

-(void)state:(AttentionState)aState{

    switch (aState) {
        case AttentionBlank:
//            [self blank];
            break;
        case AttentionNormal:
//            [self normal];
            break;
        case AttentionReport:
//            [self report];
            break;
        case AttentionSilent:
//            [self silent];
            break;
    }
}

注意

我们之前习惯使用switch语句中加上default分支,然而,如果我们使用枚举来定义状态机,建议不要使用default。因为如果我们在使用过程中,发现需要再加上一个状态,不使用default时,编译器会发出警告,提醒我们新加入的状态没有在switch分支中处理

switch中的default,一般用在最后,表示非以上的任何情况下而发生的情况,我们一般习惯在他的后面加上个break。

如:


新加入的状态没有处理会警告 写default分支就不会报警告

升级方法

以上的枚举定义方法没有指定底层的数据类型,现在苹果的枚举都是这样写的

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,
    UITableViewCellStyleValue1,
    UITableViewCellStyleValue2,
    UITableViewCellStyleSubtitle
};

第一个参数指明底层数据类型
在开发中,推荐使用NS_ENUM,确定类型,保证统一!

相关文章

网友评论

本文标题:枚举 typedef enum NS_ENUM 认知

本文链接:https://www.haomeiwen.com/subject/tvocwttx.html