2017-01-30 65 views
0

我試圖檢查if條件下numberOfItemsPerSection是否大於3。它總是返回true。然後我決定調試。在if條件下使用三元運算 - 目標C

indexPath.row等於1和numberOfItemsPerSection = 20它怎麼可能會進入if條件。

我在使用下面的三元運算符做錯了什麼?

if(indexPath.row == (numberOfItemsPerSection > 3) ? (numberOfItemsPerSection-4) : numberOfItemsPerSection) 
{ 


} 
+0

在此操作中indexPath.row ==(numberOfItemsPerSection > 3)這將解決爲真或假。這會在if條件中留下(numberOfItemsPerSection-4)或numberOfItemsPerSection。我認爲這大於0這就是爲什麼它進入if條件。 –

+1

您最終在if中檢查(numberOfItemsPerSection-4)或numberOfItemsPerSection。看看這個三元運營商谷歌你會發現什麼是錯的 –

回答

4

使用parenthesises解決的優先級。按照以下方式更改條件。用圓括號覆蓋你的turnery條件。它將首先解析turnery操作符,然後將它與indexPath.row進行比較。

if(indexPath.row == ((numberOfItemsPerSection > 3) ? (numberOfItemsPerSection-4) : numberOfItemsPerSection)) 
1

你可以寫:

if (indexPath.row == (numberOfItemsPerSection > 3 ? numberOfItemsPerSection - 4 : numberOfItemsPerSection)) { ... } 

或者,如果你不想傷害你的眼睛:

BOOL desiredRow = numberOfItemsPerSection > 3 ? numberOfItemsPerSection - 4 : numberOfItemsPerSection; 
if (indexPath.row == desiredRow) { ... } 
1
NSInteger desiredRow = numberOfItemsPerSection > 3 ? (numberOfItemsPerSection-4) : numberOfItemsPerSection; 
if(indexPath.row == desiredRow) { ... // do your coding } 
+0

雖然這段代碼可能會解決問題,一個很好的答案也應該包含一個解釋。 – BDL