Swift for循环不起作用

dro*_*Fai 2 for-loop ios sprite-kit swift

我对无法使用的Swift代码中的此循环感到困惑。这是整个函数-“ pulseChar”给我错误“索引超出范围”:

func openingSequence(){
        let nodeList = [self.drum,self.piano,self.guitarBoard]
        let offset = SKAction.waitForDuration(10)
        let stOne = SKAction.runBlock { () -> Void in
            for var i in 0...nodeList.count-1{
                nodeList[i].runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3))
                i++
            }
        }
        let firstLineWait = SKAction.waitForDuration(4)
        let moveSprites = SKAction.runBlock { () -> Void in
            moveScale(self.rheaBoard, duration: 0.5, to: CGPoint(x: 100, y: self.frame.height - 85), size: 0.4)
            moveScale(self.guitarBoard, duration: 0.5, to: CGPoint(x: self.frame.midX - self.frame.midX/2, y: 65), size: 0.35)
            for var i in 0...nodeList.count-1{
                nodeList[i].runAction(fadeI)
                i++
            }
        }
        let fadeAudio = SKAction.runBlock { () -> Void in
            fadeOtherTracksOut([9,8,4,2,1])
        }
        let moveFade = SKAction.group([moveSprites,fadeAudio])
        let pulseChar = SKAction.runBlock { () -> Void in
            for var i in 0...nodeList.count-1{
                self.background.runAction(SKAction.runBlock({ () -> Void in
                    pulse(nodeList[i], startScale: 0.35, endScale: 0.4)
                }))
                i++
            }
            self.startInteaction = true
        }

        background.runAction(SKAction.sequence([offset,stOne,firstLineWait,moveFade,pulseChar]))
    }
Run Code Online (Sandbox Code Playgroud)

我的编译器告诉我,失败时我= 3 ...但是“ i”不应变成3,因为

nodeList.count = 3
Run Code Online (Sandbox Code Playgroud)

我用范围

for var i  in 0...nodeList.count-1
Run Code Online (Sandbox Code Playgroud)

另外,相同的循环也可以正常工作...这里发生了什么?我是编程的新手,因此,如果这是一个非常简单的修复程序,那么您必须原谅我。但是,将不胜感激帮助。

编辑

看来运算符i ++必须位于runBlock内部:

let pulseChar = SKAction.runBlock { () -> Void in
            for var i in 0...nodeList.count-1{
                self.background.runAction(SKAction.runBlock({ () -> Void in
                    pulse(nodeList[i], startScale: 0.35, endScale: 0.4)
                    i++
                }))
            }
Run Code Online (Sandbox Code Playgroud)

这解决了问题,但是如果有人不介意解释为什么会这样,我将不胜感激。在我看来,如果运算符i ++处于循环内,则永远不应== 3。

vad*_*ian 5

不要i“手动” 增加索引变量,重复循环会自动执行。

而且您可以使用半开范围运算符来避免额外的减法,例如

for i in 0..<nodeList.count {
     nodeList[i].runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3))
}
Run Code Online (Sandbox Code Playgroud)

要么

for node in nodeList {
     node.runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3))
}
Run Code Online (Sandbox Code Playgroud)

如果不需要数字索引。

甚至

nodeList.forEach{ $0.runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3)) }
Run Code Online (Sandbox Code Playgroud)