2

私はObjectiveCで次のような簡単なチェックを行おうとしています。

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

最も簡単なアプローチは、おそらくビットマスクを作成してからint spriteBtags = (1 << 10) | (1 << 11) | (1 << 12) | ...;、でテストすること(1 << spriteB.tag) & spriteBtagsです。ただし、このアプローチでは、spriteB.tagの値がintまたはlongのビット数に制限されることに注意してください。そしてもちろん、作成する長いステートメントがありますがspriteBtags、それは1回限りの割り当てです。

Pascalのような他の言語にはビットセットがあり、この種のことをより簡単にします。

(varargs関数を作成することで、少なくとも代入ステートメントの複雑さを隠すことができますint spriteBtags = createIntBitset(10,11,12,...17,-1);:)

于 2012-10-07T01:43:42.247 に答える
1

列挙型のような値では、switchステートメントが役立つ場合があります。

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