2013-03-22 31 views
1
#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES) 

我使用上述来检查用户是否使用iPhone 5,但我真的不明白它是如何工作的。试图了解一个简单的声明

常识告诉我,如果用户屏幕边界是X - 568 = 0用户正在使用iPhone 5. 但在上面的语句中0将是一个NO BOOL,所以不明白它是如何返回YES 。

+1

正如其他人所解释的那样,这将起作用,但它太自命了。这就像编写这些代码的人正在竭尽全力使代码不可读。为什么不直接说'([[UIScreen mainScreen] bounds] .size.height == 568.f)'? – borrrden 2013-03-22 13:28:10

+0

@borrrden我不知道,并认为相同的方式(除非有什么我失踪) – Segev 2013-03-22 13:47:58

回答

2

(0 ? "yes" : "no")结果为"no"

(0 ? "no" : "yes")结果在"yes"

?之后的表达式是布尔表达式为true时的结果。 :后面的表达式是布尔表达式为false时的结果。

1

这是很简单的,

,你已经解决了这个逻辑,是的,它会说零点,零点它将返回YES

因为编程中ZERO MEANS FALSE!所以False将返回“YES”

而非零意味着TRUE!所以TRUE将返回“NO”

三元运算符在这里使用,它将以上述方式工作。

+0

是的,但为什么0返回YES? – Segev 2013-03-22 13:19:28

+1

因为在编程0意味着FALSE和假将返回后者的值是YES :) – 2013-03-22 13:20:07

+1

@EXEC_BAD_ACCESS,因为0评估为false。还有其他的事情是真的。在三元运算符中,如果陈述是错误的,则将返回后者(如果它是真的,则前者将被返回)。在NO:YES的情况下,YES是后者,因此返回YES。 – 0xSina 2013-03-22 13:21:01

2

这意味着:

if([[UIScreen mainScreen] bounds].size.height-568) 
    return NO; 
return YES; 

IPHONE5高度是568,所以[[UIScreen mainScreen] bounds].size.height-568 = 00意味着NO,别人意味着YES

+0

我不认为三元运算符*返回* ... – Sebivor 2013-03-22 14:07:42

+0

@modifiablelvalue它必须是返回,例如你也许代码'int a = _yourBool?3:5';但是你永远不会编码:'_yourBool?3: 5',因为它没有用 – 2013-03-23 02:31:27

+0

我认为我们对“return”有不同的定义。我的定义专门用于C中'return'的行为,通过这个定义,三元运算符肯定不会返回。如果是这样,那么'int main(void){char * str = 0? “false”:“true”;放(STR); }'不会打印任何东西,因为main会在到达'puts(...);'语句之前返回。 – Sebivor 2013-03-23 02:55:15

0

第一,一些类似这样的语句: “IsTrue运算?NO:YES”,它的意思当“?”之前的语句确实为true时,整个语句(isTrue?NO:YES)值为“NO”,否则为“YES”;此处,此语句的值([[UIScreen mainScreen]边界] .size.height-568)可以为零或非零,所以当[[UIScreen mainScreen]边界] .size.height等于568时,上述状态ment为零,Zero表示错误,所以返回“YES”。