我对我的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]))
}
我的编译器告诉我,失败时我= 3 ...但是“ i”不应变成3,因为
nodeList.count = 3
我用范围
for var i in 0...nodeList.count-1
另外,相同的循环也可以正常工作...这里发生了什么?我是编程的新手,因此,如果这是一个荒谬的简单修复,则必须原谅我。但是,将不胜感激帮助。
编辑
看来运算符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++
}))
}
这解决了问题,但是如果有人不介意解释为什么会这样,我将不胜感激。在我看来,如果运算符i ++处于循环内,则永远不应== 3。
不要i
“手动”增加索引变量,重复循环会自动执行。
您可以使用半开范围运算符来避免额外的减法,例如
for i in 0..<nodeList.count {
nodeList[i].runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3))
}
或者
for node in nodeList {
node.runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3))
}
如果不需要数字索引。
甚至
nodeList.forEach{ $0.runAction(SKAction.fadeAlphaTo(0.3, duration: 0.3)) }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句