gpt4 book ai didi

ios - Swift for 循环不起作用

转载 作者:可可西里 更新时间:2023-11-01 00:36:55 25 4
gpt4 key购买 nike

我对我的 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]))
}

我的编译器在失败时告诉我 i = 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,repeat 循环会自动完成。

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

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)) }

关于ios - Swift for 循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com