Swift for循环不起作用

德里克·费尔霍尔姆

我对我的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift NSCoding不起作用

来自分类Dev

KeyDown不起作用,Swift

来自分类Dev

MPMoviePlayerController不起作用-Swift

来自分类Dev

Swift SequenceType不起作用

来自分类Dev

Swift NSEvent不起作用

来自分类Dev

searchBarSearchButtonClicked不起作用Swift

来自分类Dev

Swift setToolbarHidden不起作用

来自分类Dev

Swift 请求不起作用

来自分类Dev

Swift 协议不起作用

来自分类Dev

Swift-UIActionSheet事件不起作用

来自分类Dev

Swift UIApplication.setStatusBarStyle不起作用

来自分类Dev

Swift 2.2,包含方法不起作用

来自分类Dev

ADInterstitialAd在iPad Swift上不起作用

来自分类Dev

Swift-AVAudioPlayer不起作用

来自分类Dev

scheduleLocalNotification在Swift 2.0中不起作用

来自分类Dev

Swift-Switch语句不起作用

来自分类Dev

Swift泛型函数不起作用

来自分类Dev

关闭nsviewcontroller swift不起作用

来自分类Dev

Swift中的可选分配不起作用?

来自分类Dev

UITextField inputView在Swift中不起作用

来自分类Dev

功能在Swift中不起作用

来自分类Dev

UIAlertView在Swift中不起作用

来自分类Dev

Swift UIButton覆盖,setImage不起作用

来自分类Dev

在Swift中创建块不起作用

来自分类Dev

Swift CoreData子类不起作用

来自分类Dev

perfrmSegueWithIdentifier()在Swift iOS中不起作用

来自分类Dev

Swift:按钮启用不起作用?

来自分类Dev

presentViewController在Swift中不起作用

来自分类Dev

UIDevice在Swift 2.0中不起作用