Как переопределить SKScene init(fileNamed: fileNamed)
У меня есть класс SKScene, в котором мне нужно реализовать пользовательский инициализатор, который переопределяет инициализатор init (fileNamed: fileNamed) SKNode суперкласса SKScene, чтобы выполнить некоторые проприетарные инициализации, но сохранить возможность, предлагаемую init (fileNamed: fileNamed) для загрузить сцену из конструктора интерфейса.
У меня есть некоторые проблемы, чтобы найти правильный синтаксис. Я пробовал следующее:
class Try: SKScene
{
override init(fileNamed: String)
{
super.init(fileNamed: fileNamed)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Но он возвращает ошибку: инициализатор не переопределяет указанный инициализатор из своего суперкласса
Однако это назначенный инициализатор из суперкласса, не непосредственный суперкласс, который является SKEffectNode, а тот, который выше, который является SKNode. Как я могу переопределить инициализатор в этом случае?
J.
1 ответ
Из документов SWIFT:
И наоборот, если вы пишете инициализатор подкласса, который соответствует удобному инициализатору суперкласса, этот вспомогательный инициализатор суперкласса никогда не может быть вызван напрямую вашим подклассом согласно правилам, описанным выше в Делегации инициализатора для типов классов. Следовательно, ваш подкласс (строго говоря) не обеспечивает переопределение инициализатора суперкласса. В результате вы не пишете модификатор переопределения при предоставлении соответствующей реализации удобного инициализатора суперкласса.
Если я правильно понимаю, этот код должен работать:
convenience init?(fileNamed filename: String)
{
self.init(fileNamed: filename)
}