使用 get/set 表示法快速设置非原始成员

标签 swift vector overriding getter-setter

我有一个父类(super class),其中创建了一个向量作为成员变量。

class GameScene: SKScene, SKPhysicsContactDelegate {
         var floatingBlockPositions: [CGPoint] = [CGPointMake(130.0, 70.0)]
  }

我在子类中重写它,如下所示:

class StreetFight: GameScene {
override var floatingBlockPositions: [CGPoint] {
        get {
            return [CGPointMake(400.0, 70.0), CGPointMake(250.0, 95.0)]
        }
        set (newValue) {
            newValue
        }
    }
}

我有一个类方法,它可以改变它以设置另一个参数。

   temp = 0
   for _ in floatingBlockPositions {
       floatingBlockPositions[temp].y = floatingBlockPositions[temp].y +  positionsForFirstBlock.y + (groundBlockSize.height / 2)
       let aerialBlock = SKSpriteNode(imageNamed: "aerialBlock")
       aerialBlock.position = floatingBlockPositions[temp]
        temp++
    }

调试后,我看到子类中的 setter 被调用,但它没有被正确设置,因为函数中的等于运算符试图仅设置向量中一个 CGPoint 的一部分,该向量setter 未设置为处理,没有双关语的意思。如何在子类中编写 setter ,以便它识别需要设置 floatBlockPositions 的哪一部分并设置它。如果可能的话,我应该重载该方法,还是有更好的方法来做到这一点?

最佳答案

您已将 floatingBlockPositions 从存储属性更改为计算变量(因为它具有 get)。因此,您无法为其存储新值。但是,您可以创建一个单独的私有(private) var 并对其进行设置,然后在 get 中,如果已设置,则返回该新值。

关于使用 get/set 表示法快速设置非原始成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953145/

相关文章:

ios - 手动在 SKS 文件中创建的标签节点未加载

c++ - 如何在类的构造函数中初始化 vector

c# - 我怎样才能记住 super 调用父级?

ios - 覆盖 UIImage(名为 : )

swift - 如何从 SecCertificate 中提取或比较 kSecPropertyKeyValue

swift - 快速从类型转换为字符串,反之亦然

ios - 带有 2 个换行符的 NSmutablestring 使程序崩溃

r - 将命名向量转换为列表但保留向量名称

c++ - 关于C++中 vector 、 union 和指针的问题

MySQL - 如何输入自定义值并覆盖触发器?