我正在尝试创建一个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。怎么了?
答案 0 :(得分:1)
假设您的示例已完成,问题在于此行
AppSettings.user?["User_ID"] = String(describing: dictionary["User_ID"])
user
变量是可选的,因此除非您先创建一个空字典,否则会发生这种情况 - 如果user
不是nil,请在"User_ID"
键下指定一个值。
您需要做的就是在尝试为其添加值之前编写AppSetting.user = [String:Any]()
。现在,您似乎可以在init()
中执行此操作,但除非您致电sharedInstace
,否则不会调用它。
在旁注 - 如果您将其设为单身,为什么要将user
变量公开为static
?