6

我有以下代码

var column = 0

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

从 2.2 开始,我收到了折旧警告,有什么办法可以解决这个问题吗?

我有这个解决方案:

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

但这不是很好。

4

2 回答 2

13

怎么样:

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

看起来你可能正在做类似时钟算术的事情。如果是这样,这可以更好地理解这一点:

column = (column + 1) % 2
于 2016-03-23T13:07:07.187 回答
0

在最简单的情况下,您可以替换++columncolumn + 1

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

您还可以使用运算符在if-else 语句+=中重写您的代码:

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

此外,虽然我不建议在生产代码中使用它,但您可以使用自定义运算符输入输出参数defer 语句在 Swift 2.2 和 Swift 3中重新实现++(prefix / postfix increment operator) 和--(prefix / postfix decrement decrement operator) 类型.Int

// 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
于 2016-04-01T14:13:45.363 回答