首页 > 解决方案 > 单例模式初始化调用一次

问题描述

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

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

我试图在私有 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
    }
}

}

标签: swift

解决方案


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

  • 或者只是使用一些断点

推荐阅读