Obj-C 中的多值枚举
在 Cocoa 和 Cocoa Touch 框架中,枚举用作常量。我了解如何使用它,但在一种情况下,您可以使用 |
运算符将多个值作为参数传递。就像:
pageControl.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin);
枚举是这样声明的:
enum {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
typedef NSUInteger UIViewAutoresizing;
我如何定义自己这种类型的枚举(即 <<
的含义)以及如何在作为参数传递时检查多个值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
<<
是位移运算符。所以1 << 2
告诉它将该位移动两个空格。示例:
在二进制中,数字
1
为:1 << 2
表示将所有位向左移动 2 个空格,结果是这个值:或
4
。因此,示例中每个 ENUM 的值是 1、2、4、8、16 等。他们也可以将每个枚举设置为这些值。但由于他们使用该枚举来表示多个值,因此二进制值使其更加清晰:
因此他们使用位移位进行编写。
因此,如果 I OR (
|
) 其中两个值在一起,例如FlexibleLeftMargin
(0001
) 和 FlexibleWidth (0010
) >),我会得到以下值:因此他们使用每个位作为标志,这样他们就知道您设置了多个值。
现在,您可以使用 AND 运算符
&
来确定是否设置了特定值。所以你可以这样做来检查你是否设置了一个枚举:
希望这是有道理的。
有关按位运算的更详尽解释,请阅读:Wikipedia ~ 位运算符 或搜索围绕“位运算符”
<<
is the bitshift operator. So1 << 2
tells it to shift the bit two spaces over.Example:
In binary the number
1
is:1 << 2
means to shift all the bits to the left 2 spaces, which results in this value:or
4
.So the values of each ENUM in your example is, 1, 2, 4, 8, 16, etc. They could have just as well set each enum to those values. But since they use that enum for multiple values, the binary values makes it more clear:
so they wrote using the bit shifts.
so if I OR (
|
) two of those values together, for exampleFlexibleLeftMargin
(0001
) and FlexibleWidth (0010
), I would get the following value:So they use each bit as a flag so they know you have multiple values set.
You can now use the AND operator
&
to figure out if you have a specific value set.So you could do this to check if you have one of enums set:
Hopefully this makes sense.
For a more thurough explanation on bitwise operations read this: Wikipedia ~ Bit Operators or search around for "bit operators"
<<
是左移运算符,意思是将左值向左移动N位。在本例中,它在枚举中设置单个位(位 1、2、3、4、5),这允许按位 OR 运算符 (|
) 组合值。<<
is the left shift operator, meaning move the left value N bits to the left. In this case, it is setting a single bit (bit 1, 2, 3, 4, 5) in the enum, which allows the bitwise OR operator (|
) to combine values.