Как переопределить 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)
}
Другие вопросы по тегам