Objective-C中的三明治条件

Objective-C中的三明治条件,objective-c,Objective C,我正在尝试以下条件,编译器没有给出任何警告,但代码似乎不起作用。这样行吗 if (self.finishLine > hero.position.y > self.startHeight) { hero.position = CGPointMake( hero.position.x + translation.x, hero.position.y); } 我没有试过,但我相信这是一个有效的表达方式。AFAIK目标C不支持三明治 (a>b>c)应分别评估为真或假是或否。

我正在尝试以下条件,编译器没有给出任何警告,但代码似乎不起作用。这样行吗

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

我没有试过,但我相信这是一个有效的表达方式。AFAIK目标C不支持三明治

(a>b>c)应分别评估为真或假是或否。但如何评估?编译器将在这里从左到右开始,因为所有运算符都是相等的。(a>b)将评估为是或否。这些在内部由1和0表示。1和0可能大于或不大于c

我想知道编译器是否至少抛出了一个警告


你试过了吗

比较运算符返回布尔值

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

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

->((>self.startHeight)

我怀疑self.starthelight永远小于1,更不用说小于0了

C中的正确形式为:


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

ha你认为它会把self.finishLine>hero.position.y变成1或0,然后比较1或0>self.startHeight?我会喜欢熏牛肉三明治顺便说一句……记住Objective-C是基于C的,所以像这样的一个方面不是Objective-C特有的(正如你的标题所示),但是一个简单的问题是如何用C编写布尔表达式。我知道,但你有一个例子,比如objective-C中的forin语句,它在C afaik中不存在。当然,但这里的主题是布尔表达式(因为in不是一个表达式,而是一个控制语句)语言语法的细节比我的站稍高一些,所以我将把它放在这里。啊,重新阅读你的问题,并评论我自己的评论,我认为你认为它是一个条件构建。它不是——如赫尔曼所提到的,它是一个简单的布尔表达式,它正好被用来评价if语句。可以编写与布尔赋值语句右侧相同的表达式。您可能会认为这在C中是错误的,因此在if语句中也是错误的。是的,我自己决定用这种方式编写条件。使用三明治条件可能会很酷