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
}