NS_OPTIONS匹配

时间:2012-12-11 06:19:51

标签: objective-c ios

我正在尝试实现以下typedef

typedef NS_OPTIONS (NSInteger, MyCellCorners) {
    MyCellCornerTopLeft,
    MyCellCornerTopRight,
    MyCellCornerBottomLeft,
    MyCellCornerBottomRight,
};

并使用

正确分配值
MyCellCorners cellCorners = (MyCellCornerTopLeft | MyCellCornerTopRight);

绘制单元格时,如何检查哪些选项匹配,以便我可以正确绘制它。

3 个答案:

答案 0 :(得分:52)

使用位屏蔽:

typedef NS_OPTIONS (NSInteger, MyCellCorners) {
    MyCellCornerTopLeft = 1 << 0,
    MyCellCornerTopRight = 1 << 1,
    MyCellCornerBottomLeft = 1 << 2,
    MyCellCornerBottomRight = 1 << 3,
};

MyCellCorners cellCorners = MyCellCornerTopLeft | MyCellCornerTopRight;

if (cellCorners & MyCellCornerTopLeft) {
    // top left corner set
}

if (etc...) {

}

答案 1 :(得分:21)

检查此值的正确方法是先按位AND值,然后检查是否与所需值相等。

MyCellCorners cellCorners = MyCellCornerTopLeft | MyCellCornerTopRight;

if ((cellCorners & MyCellCornerTopLeft) == MyCellCornerTopLeft) {
    // top left corner set
}

以下参考资料解释了为什么这是正确的,并提供了枚举类型的其他见解。

参考:checking-for-a-value-in-a-bit-mask

答案 2 :(得分:0)

我同意NSWill。我最近有一个类似的错误比较问题。

权利if语句应该是:

if ((cellCorners & MyCellCornerTopLeft) == MyCellCornerTopLeft){