我有一个父类(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/