2016-03-23 45 views
6

我有以下代碼如何重寫斯威夫特++運算符:三元運算

var column = 0 

column = column >= 2 ? 0 : ++column 

自2.2我得到一個警告貶值,任何想法如何,我可以解決這個問題?

我有這樣的解決方案:

if column >= 2 { 
    column = 0 
} else { 
    column += 1 
} 

但這還不是非常好的。

+9

它原來的碼,這是不是很好。 '列= ++列'是一個可怕的事情說。這正是運營商被廢除的原因。 – matt

回答

12

如何:

column = (column >= 2) ? 0 : column+1 

看起來你可能會做一些像時鐘算法。如果是這樣,這得到整個好點:

column = (column + 1) % 2 
0

在最簡單的情況下,可以用column + 1替代++column

var column = 0 
column = column >= 2 ? 0 : column + 1 

您也可以重寫一個你的代碼如 - else語句+=運算符:

var column = 0 
if column >= 2 { 
    column = 0 
} else { 
    column += 1 
} 

此外,雖然我不建議在生產代碼使用它,您可以Int型雨燕2.2和斯威夫特3重新實現++(前綴/後綴增量運營商)和--(前綴/後綴遞減運算符)與custom operatorsin-out parametersdefer statement

// Swift 2.2 

prefix operator ++ {} 
prefix operator -- {} 
postfix operator ++ {} 
postfix operator -- {} 

prefix funC++(inout a: Int) -> Int { 
    a += 1 
    return a 
} 

prefix func --(inout a: Int) -> Int { 
    a -= 1 
    return a 
} 

postfix funC++(inout a: Int) -> Int { 
    defer { a += 1 } 
    return a 
} 

postfix func --(inout a: Int) -> Int { 
    defer { a -= 1 } 
    return a 
} 
// Swift 3 

prefix operator ++ 
prefix operator -- 
postfix operator ++ 
postfix operator -- 

@discardableResult prefix funC++(a: inout Int) -> Int { 
    a += 1 
    return a 
} 

@discardableResult prefix func --(a: inout Int) -> Int { 
    a -= 1 
    return a 
} 

@discardableResult postfix funC++(a: inout Int) -> Int { 
    defer { a += 1 } 
    return a 
} 

@discardableResult postfix func --(a: inout Int) -> Int { 
    defer { a -= 1 } 
    return a 
} 

作爲一個例子,使用三元運算符下面操場代碼生成與夫特2.2和夫特3沒有警告:

var a = 10 
print(a++) // prints 10 
print(a) // prints 11 

var b = 10 
print(--b) // prints 9 
print(b) // prints 9 

var column = 0 
column = column >= 2 ? 0 : ++column 
print(column) // prints 1 
+2

這個答案需要一個大的「不要在真正的項目中做」免責聲明。 – Sulthan