关于多状态枚举值比较判断的问题

枚举在开发中经常用到,可以表示一种事物的几种不同状态或者类型等,于是我们通常要根据当前的状态来和枚举元素进行比较来得到当前是什么状态,但是我发现一个问题,枚举值的比较真的是按照我们给枚举赋的值来单纯地比较大小或者是否相等来得出结论的吗?废话不多说,看代码:


暂且定义一个这样的枚举并且分别赋值

然后我们来做一下最简单的if判断并输出看一下结果:


在这里大家可以猜一下结果,哈哈

结果会比较尴尬,如下:


怀疑正确性的可以敲一下哈,代码不多

为什么会出现这个结果?我们再定义一个枚举,但是这次为单个枚举赋值是采用位运算的方式【这也是苹果和众多SDK使用的】,如下:


为了好理解我把二进制数据也写出来了

然后同样在做一个赋值并且加上if判断,结果如下:




这个是结果,看出什么了吗?

解释如下:


这就是多状态枚举值比较的过程,最后输出为KTextOnly和KHUDWithText

总结:枚举的比较不是简单地值比较,而是位的比较。这种情况在什么时候会用到呢?举个例子,如果一个人同时满足了是老板并且是男人的两个条件,这个时候就要用到HttpHUDType type = KTextOnly | KHUDWithText;这样的写法,然后进行判断的时候就要留心了,如果说像第一个例子那样简单地对枚举进行了常量赋值【在发现这个问题之前我就是简单地常量赋值的?】,就会出现判断错误的情况,这个问题也是今天偶然发现的,说的有什么不对或者不当的地方欢迎大家批评指正?。【NS_OPTIONS也是一样的结果哦,大家可以试下】


在这里可以提一个小建议:大家平时可以用一个控制台工程作为一个“实验工程”放在桌面上,平时有什么无关UI的疑问可以直接在那个工程里面试一下,因为控制台程序运行的比较快也不会占用大家太多的时间


转载于:https://juejin.im/post/5b2b05fe51882574a6724cf0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值