2

我正在尝试像这样在Objective C中进行简单的检查:

if ((spriteA.tag == 4 && spriteB.tag == 10)) {
}

但是,我试图在实现以下目标的同时完成1 if次检查:

if ((spriteA.tag == 4 && spriteB.tag == 10,11,12,13,14,15,16,17)) {
}

现在我知道我可以使用||运算符,但这会使1 if检查多行代码,因此看起来难以辨认。现在有任何有组织的方式来实现我想要做的事情吗?

谢谢!

4

2 回答 2

1

对于类似枚举的值,switch语句可能很有用:

switch(spriteB.tag) {
case 4:
case 10:
case 12:
case 17:
case 42:
    ...
    break;
}
于 2012-10-07T01:52:52.723 回答
1

最简单的方法可能是制作一个位掩码int spriteBtags = (1 << 10) | (1 << 11) | (1 << 12) | ...;,然后使用(1 << spriteB.tag) & spriteBtags. 但请注意,这种方法将 spriteB.tag 的值限制为 int 或 long 中的位数。而且,当然,您有很长的语句要 create spriteBtags,但这是一次性作业。

其他语言如 Pascal 有位集,这使得这类事情更直接。

(您至少可以通过编写可变参数函数来隐藏赋值语句的复杂性int spriteBtags = createIntBitset(10,11,12,...17,-1);:)

于 2012-10-07T01:43:42.247 回答