2013-03-22 58 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」。