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

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

结果会比较尴尬,如下:

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

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


解释如下:

总结:枚举的比较不是简单地值比较,而是位的比较。这种情况在什么时候会用到呢?举个例子,如果一个人同时满足了是老板并且是男人的两个条件,这个时候就要用到HttpHUDType type = KTextOnly | KHUDWithText;这样的写法,然后进行判断的时候就要留心了,如果说像第一个例子那样简单地对枚举进行了常量赋值【在发现这个问题之前我就是简单地常量赋值的🙃】,就会出现判断错误的情况,这个问题也是今天偶然发现的,说的有什么不对或者不当的地方欢迎大家批评指正😄。【NS_OPTIONS也是一样的结果哦,大家可以试下】
在这里可以提一个小建议:大家平时可以用一个控制台工程作为一个“实验工程”放在桌面上,平时有什么无关UI的疑问可以直接在那个工程里面试一下,因为控制台程序运行的比较快也不会占用大家太多的时间
