Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于存储用户设置的Swift Singleton类_Ios_Swift - Fatal编程技术网

Ios 用于存储用户设置的Swift Singleton类

Ios 用于存储用户设置的Swift Singleton类,ios,swift,Ios,Swift,我正在尝试创建一个AppSettings类来在用户字典中存储用户设置。我的AppSettings类: class AppSettings : NSObject { static var user: [String: Any]? static let sharedSingleton : AppSettings = { let instance = AppSettings() return instance }() var user

我正在尝试创建一个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")

它显示用户为null。怎么了?

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

AppSettings.user?["User_ID"] = String(describing: dictionary["User_ID"])
user
变量是可选的,因此除非您首先创建了一个空字典,否则会发生这种情况-如果
user
不是nil,请在
“user\u ID”
键下分配一个值

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


另一方面,如果您将此设置为单例,为什么要将
user
变量公开为
static

您的AppSettings.user是否在打印时有内容,或者您得到“user Defaults has no values”?我得到“user Defaults has no values”。我无法添加值您从未为键“user”设置任何数据。您尝试获取对象,但从未设置它,因此它将返回nil。当你试图保存它时,你会检查nil,它总是nil,所以你永远不会保存它。所以你至少需要在某个地方初始化一个“用户”对象。我不知道为什么我把它设为静态。我现在在init()中调用
AppSetting.user=[String:Any]()
,那么我应该如何在其中添加值呢?只要在访问
AppSetting.user
之前运行
init
,一切都会正常。最好的方法是使
user
不是
static
,并将其作为
AppSetting.sharedSingletion.user