单例模式初始化调用一次

时间:2018-12-06 15:01:49

标签: swift

我需要使用单例模式来保存数据,并将此数据用于我的所有应用视图。

在我的单例模式中,我想保存alamofire调用中的数据。 我只想调用一次alamofire,然后以单例模式保存此数据。

我试图在private init函数中调用alamofire,但是当我调用单例模式的对象时,alamofire也被调用了。

请问我如何?

class AccountManager {
static let sharedInstance = AccountManager()
var data = JSON()

private init() {
    Helper().alomofireGet(URL: "https://wat-stg.stardust-hosting.com/dashboard/home") { home in
        self.data = home
    }
}

}

1 个答案:

答案 0 :(得分:0)

    class AccountManager {    
        static let sharedInstance = AccountManager()
        var data = JSON()

        private init() {
            Helper().alomofireGet(URL: "https://wat-stg.stardust-hosting.com/dashboard/home") { home in
                self.data = home
            }
        }
    }

您的代码应该可以工作,但是响应是线程异步的,并且比调用init的时间晚。

因此,如果您使用类似的内容:

AccountManager.sharedInstance // it will call init here
print(AccountManager.sharedInstance.data) // most probably if the init was just called a few moments ago, the  data is not yet received from the server.

要进一步了解这种行为:

  • 用一些印刷品标记事件

private init() {
        print("called init")
        Helper().alomofireGet(URL: "https://wat-stg.stardust-hosting.com/dashboard/home") { home in
            print("received data")
            self.data = home
        }
    }

  • 或仅使用一些断点