#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES)
我使用上述來檢查用戶是否使用iPhone 5,但我真的不明白它是如何工作的。試圖瞭解一個簡單的聲明
常識告訴我,如果用戶屏幕邊界是X - 568 = 0用戶正在使用iPhone 5. 但在上面的語句中0將是一個NO BOOL,所以不明白它是如何返回YES 。
#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