我有以下代码
var column = 0
column = column >= 2 ? 0 : ++column
自2.2以来我收到了折旧警告,我有什么想法可以解决这个问题吗?
我有这个解决方案:
if column >= 2 {
column = 0
} else {
column += 1
}
但这不是很好。
答案 0 :(得分:12)
怎么样:
column = (column >= 2) ? 0 : column+1
看起来你可能正在做类似时钟算术的事情。如果是这样,那就更好了:
column = (column + 1) % 2
答案 1 :(得分:0)
在最简单的情况下,您可以将++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
}
此外,虽然我不建议在生产代码中使用它,但您可以重新实现++
(前缀/后缀增量运算符)和--
(前缀/后缀减量运算符) )对于Swift 2.2中的类型Int
和带有custom operators,in-out parameters和defer statement的Swift 3。
// 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