Oys*_*sio 25 cocoa enums objective-c
我有一个使用位标志的枚举声明,我无法弄清楚如何使用它.
enum
{
kWhite = 0,
kBlue = 1 << 0,
kRed = 1 << 1,
kYellow = 1 << 2,
kBrown = 1 << 3,
};
typedef char ColorType;
Run Code Online (Sandbox Code Playgroud)
我想将多种颜色存储在一起colorType我应该OR将这些位一起存储?
ColorType pinkColor = kWhite | kRed;
Run Code Online (Sandbox Code Playgroud)
但是假设我想检查是否pinkColor包含kRed,我该怎么做?
有人想用我提供的ColorType例子给我一个例子吗?
wal*_*lky 33
是的,使用按位OR(|)来设置多个标志:
ColorType pinkColor = kWhite | kRed;
Run Code Online (Sandbox Code Playgroud)
然后使用按位AND(&)来测试是否设置了一个标志:
if ( pinkColor & kRed )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
&只有在两个操作数中设置了相同的位时,才会设置任何位的结果.由于唯一的位kRed是位1,如果另一个操作数也没有设置此位,则结果将为0.
如果您需要获取特定标志是否设置为a BOOL而不是仅在if条件中立即测试它,请将按位AND的结果与测试位进行比较:
BOOL hasRed = ((pinkColor & kRed) == kRed);
Run Code Online (Sandbox Code Playgroud)