2016-12-28 32 views
-2

我想重寫下面的代碼使用條件運算符:如何正確使用conditionak運營商在斯威夫特

if indexPath.row == 0 { 
    cell.indentationLevel = kIndentFDA 
} else { 
    cell.indentationLevel = kIndentCompleted 
} 

但是,當我寫這篇文章:

indexPath.row == 0 ? cell.indentationLevel = kIndentFDA : cell.indentationLevel = kIndentCompleted 

我得到這個編譯器警告:

「不能分配給類型 'INT' 的不可變的表達」

+1

什麼警告說什麼? – vikingosegundo

+1

'cell.indentationLevel = indexPath.row == 0? kIndentFDA:kIndentCompleted' – luk2302

回答

1

我不知道是什麼警告,但它可能無法弄清楚應用操作員的順序。這應該工作。

cell.indentationLevel = indexPath.row == 0? kIndentFDA:kIndentCompleted

2

問題是,你不明白什麼三元運算符。這不是在分支內執行任務;分支機構不是可執行語句。相反,分支機構評估表達式;因此,您在賦值的右值中使用三元運算符,並且分支值本身就是分配的值。

所以,你正在寫的(這是廢話):

indexPath.row == 0 ? cell.indentationLevel = kIndentFDA : cell.indentationLevel = kIndentCompleted 

你是什麼意思是:

cell.indentationLevel = indexPath.row == 0 ? kIndentFDA : kIndentCompleted 
+0

可能值得解釋陳述和表達式之間的差異 – Alexander

+0

@亞歷山大謝謝,至少值得使用該術語。好主意。 – matt

+0

'a = b'是(如果我理解正確的語法),使用不返回值的賦值運算符的二進制表達式,即值爲'Void'。一個條件表達式,比如'x == 0? (y = 0):(z = 1)如果設置括號,則* *會編譯。我當然同意那個「不會這樣做」,但是直接的編譯器錯誤似乎是由優先級引起的,而不是由「語句與表達式」引起的。 –