ios - 可变运算符的左侧不可变 '..<' 返回不可变值

标签 ios swift sprite-kit

我在 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/

相关文章:

ios - WKWebView 中的嵌入推文有时无法完全加载

ios - 使用相同的自定义单元格实现两个 UITableViews 以供重用

将 JSON 响应数据转换为 swift 对象 [ObjectMapper]

javascript - 使用 EvaluateJavaScript 单击按钮意外行为

ios - 如何产生跳跃的冲动

iOS 通知触发器 : fortnightly and/or quarterly

ios - Swift 1.2 -> NSSet -> 不兼容的类型

swift - SpriteKit : White Background As SKScene

ios - 使用枚举在 Sprite Kit 中组织 zPosition 值

ios - 多个 UIViewController 的单个背景图像