变异运算符的左侧不是可变的'.. <'返回不可变值

时间:2019-01-16 01:39:34

标签: ios swift sprite-kit

几年前,我在Swift 2.0中开发了一个应用程序,运行平稳。今天,我将代码更新为3.0(后来又更新为4.0),但是我遇到一个问题,说“变异运算符的左面不是可变的'.. <'返回不可变值”,我似乎无法解决。

This answer从“ + =”中删除“ =”对我不起作用,希望有人可以帮助我解决此问题。

for i: CGFloat in 0  ..< self.frame.size.width / (groundTexture.size().width) += 1 {

完整代码如下:

func moveGroundFunc(_ duration: TimeInterval, piece: SKSpriteNode) {
    let groundMovingLeft = SKAction.moveBy(x: groundTexture.size().width, y: 0, duration: duration)

    let resetGround = SKAction.moveBy(x: -groundTexture.size().width, y: 0, duration: 0)

    let groundMovingLeftForever = SKAction.repeatForever(SKAction.sequence([groundMovingLeft, resetGround]))

    for i: CGFloat in 0  ..< self.frame.size.width / (groundTexture.size().width) += 1 {
        piece.size = CGSize(width: 1500, height: groundPiece.size.height)
        piece.position = CGPoint(x: i * piece.size.width, y: piece.size.height - 75)
    }

1 个答案:

答案 0 :(得分:3)

您的代码正在尝试对表达式的结果进行突变(使用app.exec());这是不可能的,因为匿名结果是常量,因此是不可变的。

我不确定为什么将+= 1更改为+= 1无效,但是您可以将其分为两行。如果将范围运算符从+1更改为..<,则也可以摆脱...

另一个问题是您不能将范围与+1一起使用-您需要使用实现CGFloat的类型。整数除法可能不会给您相同的结果。如果没有,则可以将循环更改为使用增量而不是范围。

SignedInteger