在super中定义的常量不能在子类的super.init中使用?

时间:2019-04-20 22:00:35

标签: swift

我想我在这里遗漏了一些令人眼花obvious乱的东西,但是我有:

class ObjectSprite: SKSpriteNode {
  let kSpriteSize = CGSize(width: 16, height: 16)
  weak var object: Game.Object?
}

以及在我的子类中:

class PlayerSprite : ObjectSprite {
 init(_ player: Game.Object) {
    super.init(texture: nil, color: SKColor.green, size: kSpriteSize)
    object = player
    name = "player"
  }
}

Swift抱怨'self' used in property access 'kSpriteSize' before 'super.init' call。但这不是常数吗?为什么不在编译时初始化它?

1 个答案:

答案 0 :(得分:1)

让我们使用super重写self调用以使错误消息显而易见:

super.init(texture: nil, color: SKColor.green, size: self.kSpriteSize)

正如错误消息所言,您无法在调用self之前访问super.init上的属性。

您有几种选择:

  1. kSpriteSize声明为static let,并将其称为ObjectSprite.kSpriteSize
  2. let kSpriteSize移动到文件的根目录,即类之外。