如何正确使用枚举

枚举类型,对程序员来说再熟悉不过了,但是,你确定你在正确得使用它吗?

在用枚举之前,让我们来区分一下状态选项这两个概念。

状态:同时只能有一种。比如:一个POST请求的返回结果:要么成功,要么失败。这种情况下,成功和失败是POST请求的一种状态。
选项:同时可以有一种或者一种以上。比如:APP可以同时支持竖屏和横屏,这个时候横屏和竖屏就是屏幕方向的两个选项。

那么,我们怎么使用枚举来定义状态和选项呢?

状态

不好的写法(你可能经常见到的写法):

#define  STATUS_FAIL        0
#define  STATUS_SUCCESS     1

//用int变量直接接收
int status = STATUS_SUCCESS;

这样写的不恰当之处在于:
1.宏定义没有类型约束,只是单纯的替换;
2.无法限制状态的所有情况;比如:人为地把status赋值为3,程序可能就会出错找不到对应的状态,因为编译器不会对status=3提示警告。

正确的写法是:

typedef enum _ZXSTATUS{
    
    ZXSTATUS_FAIL = 0,
    
    ZXSTATUS_SUCCESS

}ZXSTATUS;

选项

举个例子:

typedef enum _ZXDirection{
    
    ZXDirectionNone = 0,
    ZXDirectionTop = 1 << 0,
    ZXDirectionLeft = 1 << 1,
    ZXDirectionRight = 1 << 2,
    ZXDirectionBottom = 1 << 3,
    
}ZXDirection;

注意:这里的选项是用位运算的方式定义的,这样的好处就是,选项变量可以如下表示:

 ZXDirection direction = ZXDirectionBottom | ZXDirectionTop;

所以,用位运算就可以同时支持多个值。

升级

C++ 11之前,我们是不能指定枚举的类型的,但是这之后,我们可以为枚举指定实际的存储类型。Foundation框架已经为我们提供了更加“统一、便捷”的枚举定义方法,我们重新定义上面的例子:

typedef NS_ENUM(NSUInteger,ZXStatus) {
    
    ZXStatusFail = 0,
    ZXStatusSuccess
};

typedef NS_OPTIONS(NSUInteger,ZXDirection) {
    
    ZXDirectionNone = 0,
    ZXDirectionTop = 1 << 0,
    ZXDirectionLeft = 1 << 1,
    ZXDirectionRight = 1 << 2,
    ZXDirectionBottom = 1 << 3,
};

所以,在Objective-C中,最好所有的枚举都用“NS_ENUM”和“NS_OPTIONS”定义,保证统一。

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值