1

我有点enums喜欢 它们的语法看起来很神秘,而且我还没有找到关于它们不可否认的正确使用的明确参考点……但假设我有……

typedef enum {
    OrientTop,
    OrientBottom,
    OrientFiesta
}   Orient;

我希望能够像我所做的那样,例如,当多个选择可能适用/需要时,其他常量就可以了……</p>

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

就像一个人一样……</p>

self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;

或者也..

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

它也会很好......而不是......</p>

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

我可以用……</p>

if (o == OrientTop || OrientBottom) 

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

switch (orientation) {
    case OrientTop | OrientBottom:

或者类似的东西...... 呃,哦..你们太慢了..所以,呃..我只需要......</p>

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

(但对于第一部分..)苹果/比我更聪明的人正在使用什么额外的“秘诀”来给他们typedef额外的活力,让我的口味如此,ech..bland ..相比之下?

4

1 回答 1

3

看起来好像typedefsNSViewWidthSizable实际上是位掩码,它允许您如此喜欢的漂亮的 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;

我从一个非常有用的网站上抢走了它,该网站解释得更详细,但是您也可以通过按住来检查任何常量的枚举Command ⌘</kbd> and clicking the constant or typedef.

于 2012-07-30T18:51:03.250 回答