константа, определенная в super, не может быть использована в super.init подкласса?

#swift

#swift

Вопрос:

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

 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. Учитывая, что size это уже свойство SKSpriteNode , нет необходимости хранить kSpriteSize как отдельное свойство. Просто используйте size свойство, которое вы унаследовали

Ответ №1:

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

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

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

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

  1. Объявляйте kSpriteSize как a static let и ссылайтесь на него как ObjectSprite.kSpriteSize .
  2. Переместитесь let kSpriteSize в корень файла, то есть за пределы класса.

Комментарии:

1. это статично! в данном случае это не идеально, но работа — это особенность