2016-05-27 12 views
2

独自の初期化を行うためにSKSceneスーパークラスSKNodeのイニシャライザinit(fileNamed:fileNamed)をオーバーライドするカスタムイニシャライザを実装する必要があるSKSceneクラスがあります。 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") 
    } 
} 

をしかし、エラーを返します:私は、次のことを試してみた初期化子は、そのスーパー

から指定イニシャライザをオーバーライドしないことがあるが、スーパークラスからの指定イニシャライザではなく、即時のスーパークラスですSKEffectNodeが、上記のものはSKNodeです。この場合、初期化子をどのように無効にすることができますか?

J.

SWIFT docsから

答えて

0

逆に、あなたはスーパー、コンビニエンス初期化子があたりとして、あなたのサブクラスによって直接呼び出されることはありませんことを、スーパー、コンビニエンス初期化子と一致するサブクラスの初期化子を、書く場合「クラス型の初期化者の委任」で説明したルールしたがって、あなたのサブクラスは(厳密に言うと)スーパークラス初期化子のオーバーライドを提供していません。その結果、スーパークラスの便利な初期化子の一致する実装を提供するときに、オーバーライド修飾子を記述しません。

私はこの権利を理解していれば、このコードは動作するはずです:

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

は働いていません。それは無期限にループしています。私は、self.initが上記で宣言されたコンビニエンスinitを呼び出すのであって、スーパークラスのものではないので、推測します。 – jbegood

関連する問題