Swift 停止循环,从头开始

Swift 停止循环,从头开始,swift,xcode,loops,sprite-kit,Swift,Xcode,Loops,Sprite Kit,我正在尝试使用For循环包含enumerateChildNode。我的代码如下 func movement() { scene?.enumerateChildNodes(withName: "//enemy") { (node, stop) in enemyArray.append(node as! SKSpriteNode) } for i in enemyArray { if enemy.position = player.position + 1 { player

我正在尝试使用For循环包含enumerateChildNode。我的代码如下

func movement() {
scene?.enumerateChildNodes(withName: "//enemy") {
(node, stop) in
  enemyArray.append(node as! SKSpriteNode)
}

for i in enemyArray {
if enemy.position = player.position + 1 {
player.position = player.position + 1
}
continue
}
上面的代码所做的是检查屏幕上的每个敌人SKSpriteNode(假设它找到6个),然后检查它们相对于玩家的位置。如果玩家的位置靠近敌人的位置,它会移动玩家的位置,然后从原来的位置继续for循环,并检查其他敌人的玩家位置

但是,如果玩家移动到for循环已经检查过的敌人位置附近(当时为假),它将错过玩家靠近敌人的位置。例如:for循环检查敌人1,2,3(发现3靠近玩家并移动玩家靠近2),然后检查4,5,6。它将错过2

我想要代码做什么

 If enemy.position = player.position + 1 {
 //move player
 *stop the loop, and check the players position from the beginning of the for loop* 
}

再次调用该方法并中断循环。但是,正如您在发布问题时所知,这会导致无限循环。不确定您打算如何更改“i”的值,因为它的范围在方法中。无论如何,以下是您实现这一目标的方法:

var array = [1,2,3,4,5,6]
movement()

func movement() {
    for i in array {
        if i == 3 {
            print("hi")
            movement()
            break
        }
    }
}

再次调用该方法并中断循环。但是,正如您在发布问题时所知,这会导致无限循环。不确定您打算如何更改“i”的值,因为它的范围在方法中。无论如何,以下是您实现这一目标的方法:

var array = [1,2,3,4,5,6]
movement()

func movement() {
    for i in array {
        if i == 3 {
            print("hi")
            movement()
            break
        }
    }
}

现在,这个问题对未来的读者来说用处有限。我认为如果你把你的完整问题包括在内,包括你打算如何改变
I
,会有很大帮助。这将使目前的答案无效,而目前的答案通常是不鼓励的。不过,在这种情况下,我个人认为这是对你的问题的必要改进。更新的问题!谢谢:)在你的例子中,
位置
似乎是一维的,因此可以对其进行排序,然后你可以使用更智能的方法来确定移动玩家时会发生什么。我认为你是对的。我需要一种不同的方法:(位置不是问题,它是在我移动玩家后再次检查所有敌人的位置,这是我需要考虑的。也许for循环不是解决方案。现在,这个问题对未来的读者来说用处有限。我认为如果你包括你的完整问题,包括你打算如何更改
I
,会有很大帮助。那就是将使通常不鼓励的当前答案无效。但在这种情况下,我个人认为这是对您的问题的必要改进。更新的问题!谢谢:)在您的示例中,
位置
似乎是一维的,因此可以对其进行排序,然后您可以使用更智能的方法来确定移动玩家时发生的情况。我认为您是对的。我需要一种不同的方法:(位置不是问题,它是在我移动玩家后再次检查所有敌人的位置,这是我需要考虑的。也许for循环不是解决方案。堆栈溢出?它永远不会到达
中断
。感谢弗兰肯斯坦。虽然你写的是正确的,但我的想法是错误的。它崩溃是由于无限的循环(显然)。我已经更新了我的问题。@JoakimDanielson Ya lol,你是对的,除非OP可以更改“我”不知何故,这是不可能的。@Questions刚看到更新的帖子,可能应该尝试一种不同的方法来解决你的问题,也许应该像Joakim所说的那样对它进行排序。堆栈溢出?它永远不会到达
中断处。
。感谢弗兰肯斯坦。虽然你写的是正确的,但我的想法是错误的。它由于无限循环而崩溃(很明显)。我已经更新了我的问题。@JoakimDanielson Ya lol,你是对的,除非OP能以某种方式更改“我”,这是不可能的。@Questions刚看到更新的帖子,可能应该尝试不同的方法解决你的问题,可能会像Joakim说的那样排序。