Ios typedef NS_选项检查,如UIViewAutoResize

Ios typedef NS_选项检查,如UIViewAutoResize,ios,typedef,Ios,Typedef,简要介绍我希望通过以下方式实现的目标: 我有一个自定义的ui视图,我想让箭头可见,例如在底部和左侧。 我认为可以用与UIViewAutoresizing相同的方法来实现这一点 因此,我为我的自定义视图创建了一个类似的typedef: typedef NS_OPTIONS(NSUInteger, Arrows) { ArrowNone = 0, ArrowRight = 1 << 0, ArrowBottom = 1 << 1

简要介绍我希望通过以下方式实现的目标:
我有一个自定义的
ui视图
,我想让箭头可见,例如在底部和左侧。 我认为可以用与
UIViewAutoresizing
相同的方法来实现这一点

因此,我为我的自定义视图创建了一个类似的
typedef

typedef NS_OPTIONS(NSUInteger, Arrows) {
    ArrowNone      = 0,
    ArrowRight     = 1 << 0,
    ArrowBottom    = 1 << 1,
    ArrowLeft      = 1 << 2,
    ArrowTop       = 1 << 3
};
这一切都有效,现在我可以设置属性:
customview.arrows=(箭头底部|箭头左侧)

这将返回
6

现在是我的问题,如何检查我的
箭头
属性是否包含底部和左侧? 我试过:


这没用。是否有其他方法检查此项?

检查位掩码的正确方法是使用AND(&)运算符对值进行解码,如下所示:

Arrows a = (ArrowLeft | ArrowRight);    
if (a & ArrowBottom) {
   NSLog(@"arrow bottom code here");    
}

if (a & ArrowLeft) {
   NSLog(@"arrow left code here");    
}    

if (a & ArrowRight) {
   NSLog(@"arrow right code here");    
}

if (a & ArrowTop) {
   NSLog(@"arrow top code here");    
}
这将在控制台中打印:

arrow left code here
arrow right code here

要执行复合检查,可以使用以下代码:

if ((a & ArrowRight) && (a & ArrowTop)) {
       NSLog(@"arrow right and top code here");    
}

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

Arrows a = (ArrowBottom | ArrowLeft);    
if (((a & ArrowBottom) == ArrowBottom) && ((a & ArrowLeft) == ArrowLeft)) {
    // arrow bottom-left
}
下面的参考资料解释了为什么这是正确的,并提供了有关枚举类型的其他见解


参考资料:

谢谢,这正是我要找的。试图搜索它,但什么也找不到。不过,我不明白投票结果。@alexgray注意到,结束这个问题的并不是主持人。如何检查ArrowLeft和ArrowRight?派对迟到,但(a&(ArrowTop | ArrowRight))应该有效,但这取决于人们如何使用它们。
if ((a & ArrowRight) && (a & ArrowTop)) {
       NSLog(@"arrow right and top code here");    
}
Arrows a = (ArrowBottom | ArrowLeft);    
if (((a & ArrowBottom) == ArrowBottom) && ((a & ArrowLeft) == ArrowLeft)) {
    // arrow bottom-left
}