2016-11-22 8 views
2
class MissionControl { 

    var nameField="" 
    var surnameField="" 
    var phoneField="" 
    var tcIdField="" 
    var photoField="" 


    class var sharedInstance: MissionControl { 
     struct Singleton { static let instance = MissionControl() } 
     return Singleton.instance 
    } 



    override init() { 
     super.init() 
    } 

} 

私はSwift 2.3でこのクラスを使用していましたが、うまくいきました。しかし、私は次のコンパイラエラーを取得していますスウィフト3で使用しませんでした:スイフトのInitメソッド3

初期化子が

「スーパー」のメンバーが、ルートクラス

で参照することはできませんその スーパークラスから指定イニシャライザをオーバーライドしない

どうすれば修正できますか?

+2

を行うだろうこれは、「シングルトン」を作る時代遅れの方法です。以下のような好きな方法に従ってください:http://stackoverflow.com/a/36012158/2227743 – Moritz

+2

問題について:あなたのクラスは何からも継承されないので、なぜスーパーに電話しますか?それは必要ではありません。 – Moritz

+0

シングルトンクラスにしたいですか?はいの場合、 "init"はプライベートでなければなりません。また、より良い方法があります。 –

答えて

5

super.init()に電話をかけることなく修正できます。あなたのクラスは別の基底クラスから継承していると宣言されていないので、呼び出すにはsuper.init()がありません。ところで

は、あなたの共有インスタンスのために、私はちょうど

static let sharedInstance = MissionControl() 
+0

[OK]を私のコードを変更しました:http://prntscr.com/dac7swと別のビューコントローラからhttp://prntscr.com/dac851でアクセスしましたが、私はログセクションで自分のプリントを見ることができませんでした。問題はどこだ? –

+0

@TolgayToklar問題が何であるかはっきりしていませんが、それは遅れて起こると思います。つまり、共有インスタンスが必要になるまでではなく、共有インスタンスを使用しないと、 'let'文が最適化されている可能性があります。代入を行うだけでなく、sharedInstanceでメソッドを呼び出すこともお試しください。 – JeremyP