Левая часть оператора мутации не является изменяемой. '.. <' возвращает неизменное значение - PullRequest
0 голосов
/ 16 января 2019

Я разработал приложение в Swift 2.0 года назад, оно работало гладко. Сегодня я обновил код до 3.0 (а позже до 4.0), но у меня возникла проблема: «Левая сторона оператора мутации не изменяемая». <«Возвращает неизменяемое значение», который я не могу решить. </p>

Этот ответ об удалении '=' из '+ =' не сработал для меня, надеюсь, кто-то может помочь мне решить эту проблему.

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 голосов
/ 16 января 2019

Ваш код пытается изменить результат выражения (используя += 1); это невозможно, поскольку анонимные результаты являются постоянными и, следовательно, неизменяемыми.

Я не уверен, почему изменение += 1 на +1 не сработало, но вы можете просто разбить его на две строки. Если вы измените оператор диапазона с ..< на ..., вы также можете избавиться от +1.

Другая ваша проблема в том, что вы не можете использовать диапазон с CGFloat - вам нужно использовать тип, который реализует SignedInteger. Целочисленное деление может не дать вам тот же результат. Если этого не произойдет, вы можете изменить цикл, используя увеличение, а не диапазон.

let width = Int(self.frame.size.width / groundTexture.size().width)

for i in 0...width {
    piece.size = CGSize(width: 1500, height: groundPiece.size.height)
    piece.position = CGPoint(x: i * piece.size.width, y: piece.size.height - 75)
}
...