Swift Singleton类用于存储用户设置

时间:2016-12-16 14:35:36

标签: ios swift

我正在尝试创建一个AppSettings类来将用户设置存储在用户词典中。我的AppSettings类:

class AppSettings : NSObject
{
    static var user: [String: Any]?

    static let sharedSingleton : AppSettings = {
        let instance = AppSettings()
        return instance
    }()

    var userID: String?
    var baseUrl: String?

    override private init() {

        super.init()
       let userDefaults = UserDefaults.standard

       AppSettings.user = userDefaults.object(forKey: "user") as! [String : Any]?
        print(AppSettings.user ?? "User Defaults has no values")

        self.saveSettings()
    }

    func saveSettings()
    {
        let userDefaults = UserDefaults.standard

        if((AppSettings.user) != nil)
        {
            userDefaults.set(AppSettings.user, forKey: "user")
        }
        userDefaults.synchronize()
    }
}

我以这种方式在用户中存储值:

AppSettings.user?["User_ID"] = String(describing: dictionary["User_ID"])
AppSettings.sharedSingleton.saveSettings()

let defaults = UserDefaults.standard.object(forKey: "user")
                    print(defaults ?? "User is null")

它显示User为null。怎么了?

1 个答案:

答案 0 :(得分:1)

假设您的示例已完成,问题在于此行

AppSettings.user?["User_ID"] = String(describing: dictionary["User_ID"])

user变量是可选的,因此除非您先创建一个空字典,否则会发生这种情况 - 如果user不是nil,请在"User_ID"键下指定一个值。

您需要做的就是在尝试为其添加值之前编写AppSetting.user = [String:Any]()。现在,您似乎可以在init()中执行此操作,但除非您致电sharedInstace,否则不会调用它。

在旁注 - 如果您将其设为单身,为什么要将user变量公开为static