константа, определенная в super, не может использоваться в подклассе super.init? - PullRequest
0 голосов
/ 21 апреля 2019

Я думаю, что мне здесь не хватает чего-то ослепительного, но у меня есть:

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"
  }
}

Свифт жалуется 'self' used in property access 'kSpriteSize' before 'super.init' call. Но разве это не константа? Почему он не инициализируется во время компиляции?

1 Ответ

1 голос
/ 21 апреля 2019

Давайте перепишем вызов super, используя self, чтобы сделать сообщение об ошибке очевидным:

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

Как говорится в сообщении об ошибке, вы не можете получить доступ к свойствам на self до вызова super.init.

У вас есть несколько вариантов:

  1. Объявите kSpriteSize как static let и обозначьте его как ObjectSprite.kSpriteSize.
  2. Move let kSpriteSize в корень файла, т.е. вне класса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...