试图了解一个简单的声明
#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES)
我使用上述来检查用户是否使用iPhone 5,但我真的不明白它是如何工作的。试图了解一个简单的声明
常识告诉我,如果用户屏幕边界是X - 568 = 0用户正在使用iPhone 5. 但在上面的语句中0将是一个NO BOOL,所以不明白它是如何返回YES 。
(0 ? "yes" : "no")
结果为"no"
。
(0 ? "no" : "yes")
结果在"yes"
。
?
之后的表达式是布尔表达式为true时的结果。 :
后面的表达式是布尔表达式为false时的结果。
这是很简单的,
,你已经解决了这个逻辑,是的,它会说零点,零点它将返回YES。
因为编程中ZERO MEANS FALSE!所以False将返回“YES”
而非零意味着TRUE!所以TRUE将返回“NO”
三元运算符在这里使用,它将以上述方式工作。
这意味着:
if([[UIScreen mainScreen] bounds].size.height-568)
return NO;
return YES;
IPHONE5高度是568,所以[[UIScreen mainScreen] bounds].size.height-568 = 0
,0
意味着NO
,别人意味着YES
我不认为三元运算符*返回* ... – Sebivor 2013-03-22 14:07:42
@modifiablelvalue它必须是返回,例如你也许代码'int a = _yourBool?3:5';但是你永远不会编码:'_yourBool?3: 5',因为它没有用 – 2013-03-23 02:31:27
我认为我们对“return”有不同的定义。我的定义专门用于C中'return'的行为,通过这个定义,三元运算符肯定不会返回。如果是这样,那么'int main(void){char * str = 0? “false”:“true”;放(STR); }'不会打印任何东西,因为main会在到达'puts(...);'语句之前返回。 – Sebivor 2013-03-23 02:55:15
第一,一些类似这样的语句: “IsTrue运算?NO:YES”,它的意思当“?”之前的语句确实为true时,整个语句(isTrue?NO:YES)值为“NO”,否则为“YES”;此处,此语句的值([[UIScreen mainScreen]边界] .size.height-568)可以为零或非零,所以当[[UIScreen mainScreen]边界] .size.height等于568时,上述状态ment为零,Zero表示错误,所以返回“YES”。
正如其他人所解释的那样,这将起作用,但它太自命了。这就像编写这些代码的人正在竭尽全力使代码不可读。为什么不直接说'([[UIScreen mainScreen] bounds] .size.height == 568.f)'? – borrrden 2013-03-22 13:28:10
@borrrden我不知道,并认为相同的方式(除非有什么我失踪) – Segev 2013-03-22 13:47:58