0

私は次の条件を試しています.コンパイラは警告を出しませんが、コードは機能していないようです. これは機能しますか?

if (self.finishLine > hero.position.y > self.startHeight)
{
     hero.position  = CGPointMake( hero.position.x + translation.x,  hero.position.y);
}
4

2 に答える 2

2

比較演算子はブール値を返します。

(self.finishLine > hero.position.y > self.startHeight)

-> ((self.finishLine > hero.position.y) > self.startHeight)

-> ((<0 または 1> > self.startHeight)

self.startHeight が 1 未満であるとは思えません。0 未満は言うまでもありません。

C での正しい形式は次のとおりです。

((self.finishLine > hero.position.y) && (hero.position.y > self.startHeight))

于 2013-07-27T17:09:08.827 に答える
0

試したことはありませんが、有効な表現だと思います。AFAIK Objective Cはサンドイッチをサポートしていません..

(a > b > c) は、それぞれ TRUE または FALSE YES または NO と評価される必要があります。しかし、どのように?すべての演算子が等しいため、コンパイラはここで左から右に開始します。(a > b) は YES または NO に評価されます。これらは内部的に 1 と 0 で表されます。1 と 0 は c よりも大きい場合も、そうでない場合もあります。

コンパイラが少なくとも警告をスローするのだろうか。

あなたはそれを求めて試しましたか?

于 2013-07-27T16:56:15.823 に答える