2016-05-27 6 views
2

У меня есть класс SKScene, в котором мне нужно реализовать пользовательский инициализатор, который переопределяет инициализатор init (fileNamed: fileNamed) SKScene суперкласс SKNode, чтобы выполнить некоторые проприетарные инициализации но сохраните возможность, предлагаемую init (fileNamed: fileNamed), чтобы загрузить сцену из построителя интерфейса.Как переопределить 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") 
    } 
} 

Но он возвращает ошибку: Initializer не отменяет назначенный инициализатору от суперкласса

Это, однако, назначенный инициализатор от суперкласса, а не непосредственный суперкласса, который является SKEffectNode, но выше, чем SKNode. Как я могу переопределить инициализатор в этом случае?

J.

ответ

0

От SWIFT docs:

И наоборот, если вы пишете подкласс инициализатор, который соответствует суперкласса удобства инициализатору, что суперкласс удобство инициализатор никогда не может быть вызван непосредственно подкласса, в соответствии с правила, описанные выше в делеризации инициализации для типов классов. Поэтому ваш подкласс не является (строго говоря), обеспечивающим переопределение инициализатора суперкласса. В результате вы не записываете модификатор переопределения при предоставлении соответствующей реализации инициализатора удобства суперкласса.

Если я понимаю это право этот код должен работать:

convenience init?(fileNamed filename: String) 
{ 
    self.init(fileNamed: filename) 
} 
+0

Не работает. Это цикл бесконечно. Я думаю, потому что self.init вызывает объявленное выше назначение удобства, а не одно из суперкласса. – jbegood