如何使用typedef enum创建“或”开关?

时间:2012-07-30 18:14:08

标签: objective-c xcode cocoa enums typedef

我有点像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) 

,最重要的是...如何检查多个案例,á...

switch (orientation) {
    case OrientTop | OrientBottom:

或类似的东西.. 呃,哦..你们太慢..所以,呃..我只需要......

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

(但是对于第一部分..)苹果/聪明人比我更多的额外“秘密酱”是用来给他们的typedef提供额外的zing,这使我的味道如此, ech..bland ..相比之处?

1 个答案:

答案 0 :(得分:3)

似乎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;

我在very helpful site that explains in more detail之后抓住了这个,但您也可以通过按住Command⌘并单击常量或typedef来检查任何常量的枚举。