在我使用--theX > 0
之前,它工作得很好。
旧代码摘录:
if --theX < 0 {
...
if ++theX < 0 {
...
if ++theX > worldSize.width + 1 {
...
if --theX > worldSize.height {
...
在下面,您可以看到四行代码
theX - 1 > 0
或类似的代码。现在我已经更新到了swift 3,我想很容易将--theX
更改为theX - 1
或theX -= 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 += 1
或value
。将
if --theX > 0
转换为if theX - 1 > 0
的问题是theX
的值没有被修改,因此在theX
语句中构造Point
时,将使用错误的return Point(x: theX, y: theY)
值。关于swift - 如何在比较中替换已弃用的“-”前缀减量运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41353830/