枚举 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