在我使用--theX > 0之前,它工作得很好。
旧代码摘录:

if --theX < 0 {
    ...
if ++theX < 0 {
    ...
if ++theX > worldSize.width + 1  {
    ...
if --theX > worldSize.height  {
    ...

在下面,您可以看到四行代码theX - 1 > 0或类似的代码。现在我已经更新到了swift 3,我想很容易将--theX更改为theX - 1theX -= 1
尝试更新代码:
func move(_ point:Point, worldSize:WorldSize) -> (Point) {
    var theX = point.x
    var theY = point.y
    switch self {
    case .left:
        if theX - 1 < 0 {
            // theX = worldSize.width - 1
            print("g.o.")
            stopped = true
        }
    case .up:
        if theY + 1 < 0 {
            // theY = worldSize.height - 1
            print("g.o.")
            stopped = true
        }
    case .right:
        if theX + 1 > worldSize.width + 1  {
            // theX = 0
            print("g.o.")
            stopped = true
        }
    case .down:
        if theY - 1 > worldSize.height {
            //  theY = 0
            print("g.o.")
            stopped = true
        }
    }
    return Point(x: theX, y: theY)
  }
}

但是,这似乎不起作用(“在使用-=或+=时,无法将“bool”类型的值转换为预期的参数类型“int””-->)。如果你们想知道,这是一个蛇游戏机,上面的功能是当蛇移动时发生的事情(左,右,上,下)
关于为什么会发生这种问题,或者可能如何使用不同但相似的增量和减量版本(--and++)有什么帮助吗?

最佳答案

语句--theX使用预减量运算符。它会在使用前减小theX的值,因此:
这:

if --theX > 0 {
}

相当于:
theX -= 1
if theX > 0 {
}

其他人也是如此。如果您使用的是预减量(--value)或预增量(++value),则在下一行使用value -= 1之前,请将其替换为value += 1value
if --theX > 0转换为if theX - 1 > 0的问题是theX的值没有被修改,因此在theX语句中构造Point时,将使用错误的return Point(x: theX, y: theY)值。

关于swift - 如何在比较中替换已弃用的“-”前缀减量运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41353830/

10-12 23:35