在我使用--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)
}
}
然而,它似乎无效(&#34;无法将类型&#39; Bool&#39;的值转换为预期的参数类型&#39; Int&#39;&#34; ---&gt;使用时 - =或+ =)。如果你们想知道,这是一个Snake街机游戏,上面的功能是当蛇移动时(左,右,上,下)发生的事情
为什么会出现这个问题的任何帮助,或者可能是如何使用不同但相似的增量和减量版本( - 和++)?
答案 0 :(得分:2)
语句--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
的值未被修改,因此您将使用错误的值{ {1}}在theX
语句中构建Point
时。{/}