最小化重复代码?

时间:2012-10-06 22:04:58

标签: objective-c ios optimization repeat

我想在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检查多行代码,因此看起来难以辨认。现在是否有任何有组织的方式来实现我想要做的事情?

谢谢!

2 个答案:

答案 0 :(得分:1)

最简单的方法可能是制作一个掩码int spriteBtags = (1 << 10) | (1 << 11) | (1 << 12) | ...;,然后用(1 << spriteB.tag) & spriteBtags进行测试。但请注意,此方法将spriteB.tag的值限制为int或long中的位数。当然,你有很长的陈述来创建spriteBtags,但那是一次性的任务。

像Pascal这样的其他语言有位集,这使得这种事情更直接。

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

答案 1 :(得分:1)

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

switch(spriteB.tag) {
case 4:
case 10:
case 12:
case 17:
case 42:
    ...
    break;
}