如何创建“或”运算使用的typedef枚举交换机?(How do I create “or'

2019-10-17 02:53发布

我还挺喜欢enums 。 其语法是神秘的,看的,我还没有找到对自己不可否认正确使用引用一个明确的点..但让我们说我有..

typedef enum {
    OrientTop,
    OrientBottom,
    OrientFiesta
}   Orient;

我很想能像我一样用,例如,其他常量当多个chocies可以适用/需要,只是做...

 self.orientation = OrientTop | OrientFiesta;  // NO NO WORK-O!

就像一个不带...

self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;

或者也..

it = [[NSThing alloc]initOptions: NSStupid | NSSpicy | NSSassy];

它也将是不错的..不是...

 if ((o == OrientTop ) || ( o == OrientBottom))

我可以只使用...

if (o == OrientTop || OrientBottom) 

而且最重要的...如何检查多个的情况下,A LA ..

switch (orientation) {
    case OrientTop | OrientBottom:

什么的,那种..呃,哦..你们是太慢了..所以,废话..我只需要...

case OrientLeft:
case OrientRight:  { // blah blah blah
     break;        }

(但对于第一部分..)什么是额外的“秘密武器”,苹果/聪明的人不是我。使用给他们typedef的额外的尖啸声,使我的味道的话,ech..bland ..在比较呢?

Answer 1:

它看起来好像typedef š如NSViewWidthSizable实际上是位掩码,这让漂亮的ORing操作你这么享受。 在标题为一些UIKit元素,你可以明白我的意思:

enum {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
typedef NSUInteger UIViewAutoresizing;

我抢走那马上一个非常有用的网站,详细介绍了 ,但你也可以通过按住命令⌘并单击不变或typedef的检查任何常量的枚举。



文章来源: How do I create “or'ed” switches using typedef enum?