我有以下代碼如何重寫斯威夫特++運算符:三元運算
var column = 0
column = column >= 2 ? 0 : ++column
自2.2我得到一個警告貶值,任何想法如何,我可以解決這個問題?
我有這樣的解決方案:
if column >= 2 {
column = 0
} else {
column += 1
}
但這還不是非常好的。
我有以下代碼如何重寫斯威夫特++運算符:三元運算
var column = 0
column = column >= 2 ? 0 : ++column
自2.2我得到一個警告貶值,任何想法如何,我可以解決這個問題?
我有這樣的解決方案:
if column >= 2 {
column = 0
} else {
column += 1
}
但這還不是非常好的。
如何:
column = (column >= 2) ? 0 : column+1
看起來你可能會做一些像時鐘算法。如果是這樣,這得到整個好點:
column = (column + 1) % 2
在最簡單的情況下,可以用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 operators ,in-out parameters和defer 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
這個答案需要一個大的「不要在真正的項目中做」免責聲明。 – Sulthan
它原來的碼,這是不是很好。 '列= ++列'是一個可怕的事情說。這正是運營商被廢除的原因。 – matt