2016-05-20 5 views
0

У меня есть ObjectSwift - Не удалось инициализировать объект в Singleton

class MyObject: NSObject { 
    // some properties 

    override init() { 
     super.init() // not to init other properties here 
     print("MyObject init!") 
    } 
} 

и Singleton:

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

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

Мое приложение может работать (obj init распечатаны) только если я закомментировать obj = MyObject(). Если я не прокомментирую это, приложение появится с пустым белым экраном, обратите внимание, что MyObject init не печатается.

Не могли бы вы показать мне проблемы и как исправить?

Большое спасибо.

- ОБНОВЛЕНИЕ -

я могу инициализировать obj в didFinishLaunchingWithOption или любого другого 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

Это способ создания Swift Singleton:

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") 
    } 
} 

Это позволит вам использовать: MyObject.sharedInstance, который лучше, чем Singleton.sharedInstance.obj

Смежные вопросы