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

时间:2016-03-12 02:45:47

标签: swift vector override getter-setter

我有一个超类,其中一个向量被创建为成员变量。

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正在被调用,但它没有被正确设置,因为函数中的equals运算符只是试图设置向量中一个CGPoints的一部分, setter没有设置处理,没有双关语意图。如何在子类中编写setter,以便识别需要设置的floatBlockPositions的哪一部分并设置它。如果可能的话,我应该重载该方法,还是有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

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