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) 将评估为是或否。它们在内部由 1 和 0 表示。1 和 0 可能大于或不大于 c。

我想知道编译器是否至少会发出警告。

你去尝试过吗?

于 2013-07-27T16:56:15.823 回答