#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
.
У вас есть несколько вариантов:
- Объявляйте
kSpriteSize
как astatic let
и ссылайтесь на него какObjectSprite.kSpriteSize
. - Переместитесь
let kSpriteSize
в корень файла, то есть за пределы класса.
Комментарии:
1. это статично! в данном случае это не идеально, но работа — это особенность