Как переписать оператор Swift ++ в: тернарный оператор
у меня есть следующий код
var column = 0
column = column >= 2 ? 0 : ++column
поскольку 2.2 я получаю предупреждение об амортизации, есть идеи, как я могу это исправить?
у меня есть такое решение:
if column >= 2 {
column = 0
} else {
column += 1
}
но это не очень приятно.
2 ответов
Как насчет:
column = (column >= 2) ? 0 : column+1
похоже, вы можете делать что-то вроде арифметики часов. Если это так, это лучше всего подходит:
column = (column + 1) % 2
в простейшем случае, вы можете заменить ++column
С column + 1
:
var column = 0
column = column >= 2 ? 0 : column + 1
вы также можете переписать ваш код if-else заявление С +=
оператор:
var column = 0
if column >= 2 {
column = 0
} else {
column += 1
}
кроме того, хотя я бы не рекомендовал использовать его в производстве код, вы можете переопределить ++
(оператор префикса / постфикса инкремента) и --
(оператор декремента префикса / постфикса) для типа Int
в Swift 2.2 и Swift 3 с пользовательские операторы, параметры in-out и отложить заявление.
// 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
}
в качестве примера следующий код игровой площадки, который использует тернарный оператор, не генерирует предупреждений с Swift 2.2 и Swift 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