理解为什么swift代码无法正常工作

时间:2017-01-11 05:01:32

标签: swift swift-playground

我是新手编码,目前正在教我自己快速使用iPad上的快速游乐场。我的代码运行并完成拼图,但它继续循环,我不知道为什么。我找不到任何方法来纠正这段代码。虽然我在YouTube上发现了各种不同代码的视频。我不只是想复制它。我想明白为什么这不起作用。如果需要,我可以发送拼图视频。

while !isOnGem || !isOnClosedSwitch  {
    moveForward()
    if isBlocked && !isBlockedRight {
        turnRight()

    }
    if isBlocked && isBlockedRight {
        turnLeft()
    }
    if isOnGem {
        collectGem()
    }
    if isOnClosedSwitch {
        toggleSwitch()
    }

} 

2 个答案:

答案 0 :(得分:1)

如果没有关于每个if块中功能的任何其他信息,我会说这是由isOnGemisOnClosedSwitch的布尔值决定的。如果函数collectGem()未将isOnGem的值更改为与最初设置的值相反(true或false),toggleSwitch()不会更改isOnClosedSwitch的值{1}}与它的原始值相反,那么你将被困在循环中。由于循环将运行"而"这些值中至少有一个保持不变。

我认为将isOnGem = falseisOnClosedSwitch = false添加到各自的if块将是解决方案。

答案 1 :(得分:0)

您错过了退出条件。只要 条件为while !isOnGem || !isOnClosedSwitchtrue就会继续循环,因此您的退出条件会将这两个值都设置为false

请注意,您的支票中的两个布尔值都会被反转,因此要将两个条件设为false,您必须将布尔值设置为true

由于您的代码已运行且尚未退出循环,因此您需要检查对isOnGemisOnClosedSwitch的更改,可能会有两个中的一个始终为false结果在循环中没有退出或每次检查后运行的函数可能已将它们重置为false

检查代码如下:

func collectGem(){
    ...
    isOnGem = false
    ...
}

或其中一个函数甚至可能没有运行,您可以记录每个函数,如:

func toggleSwitch() {
    print("toggleSwitchRunning")
}

以及" toggleSwitchRunning"没有打印到控制台,检查将isOnClosedSwitch设置为true的条件是否正常工作