2016-05-20 5 views
0

でオブジェクトを初期化に失敗しました:私はobj = MyObject()をコメントアウトした場合にのみスウィフトは - 私は<code>Object</code></p> <pre><code>class MyObject: NSObject { // some properties override init() { super.init() // not to init other properties here print("MyObject init!") } } </code></pre> <p>と<code>Singleton</code>を持つシングルトン

class Singleton: NSObject { 
    static let sharedInstance = Singleton() 
    var obj: MyObject? 

    private override init() { 
     obj = MyObject() 
     print("obj init") 
    } 
} 

私のアプリが(obj initは、印刷された)実行することができます。私がそれをコメントアウトしない場合、アプリは空白の画面で表示されますが、MyObject initは印刷されません。

私に問題と解決方法を教えてください。

ありがとうございます。

- UPDATE -

私はdidFinishLaunchingWithOptionobjを初期化することができますまたは任意の他のViewControllerのviewDidLoad

private let singleton = Singleton.sharedInstance 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     // FIXME: - This should be initialized in Singleton 
     singleton.obj = MyObject() 

     return true 
    } 

答えて

0

これはスウィフトシングルトンを作成する方法である:今

class Singleton: NSObject { 
    private static let sharedInstance = Singleton() 
    private var _obj: MyObject? 
    public var obj : MyObject { 
     get { 
     if _obj == nil { 
     _obj = MyObject() 
     } 
     return obj 
    } 
    private override init() { 
     super.init() 
     //Do some stuff here  
     print("obj init") 
    } 
} 

あなただけを使用してくださいSingleton.sharedInstance.obj

しかし、より高度な実装は次のようになります。

class MyObject: NSObject { 
    private var _obj: MyObject? 
    public var sharedInstance : MyObject { 
     get { 
     if _obj == nil { 
     _obj = MyObject() 
     } 
     return obj 
    } 
    private override init() { 
     super.init() 
     //Do some stuff here  
     print("obj init") 
    } 
} 

これは、あなたが使用してみましょう:Singleton.sharedInstance.obj

よりも優れている MyObject.sharedInstance
関連する問題