2017-08-11 48 views
-2

夫特2的一部分 - 工作精細:麻煩遷移++操作者夫特3作爲三元運算表達式

column = column >= (numberOfColumns - 1) ? 0 : ++column 

夫特3 - 錯誤(「++」是不可用的:它在3斯威夫特被移除) :

column = column >= (numberOfColumns - 1) ? 0 : ++column 

或嘗試這一個 - 錯誤(突變操作者的左側具有不可變型 'INT'):

column = column >= (numberOfColumns - 1) ? 0 : column += 1 
+0

我重新打開了,因爲在三元運算符中使用'+ ='時,重複沒有回答這個問題。 – rmaddy

+3

好的,新的重複要好得多。 – rmaddy

回答

0

一般

aVar = cond ? expr1 : expr2 

等同於:

if cond { 
    aVar = expr1 
} else { 
    aVar = expr2 
} 

所以,你的三元操作員代碼是相同的:

if column >= (numberOfColumns - 1) { 
    column = 0 
} else { 
    column += 1 //<- ++column 
    column = column //<- assigning the result of (++column) to column !!!!!! 
} 

但我認爲相同的結果可以被分配到column與這在大多數情況下:

column = (column + 1) % numberOfColumns 
+0

更準確地說,導致問題的OP代碼的等價物實際上是「column = column + = 1」,這就是它導致錯誤的原因。按照這個答案中顯示的兩行進行拆分實際上可以起作用並提供所需的結果。 – rmaddy

+0

@rmaddy,我在'else'部分的兩行代碼說明了'column = ++列'在做什麼。有什麼不對的嗎? – OOPer

+0

我的評論是基於問題中的第三行代碼,而不是第二行。 – rmaddy