我在 2.0 年前用 Swift 开发了一个应用程序,它运行得很流畅。今天我将代码更新为 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
);这是不可能的,因为匿名结果是常量,因此是不可变的。
我不确定为什么要更改 += 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)
}
关于ios - 可变运算符的左侧不可变 '..<' 返回不可变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54209300/