Ios 用于存储用户设置的Swift Singleton类
我正在尝试创建一个AppSettings类来在用户字典中存储用户设置。我的AppSettings类: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
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