从“ [任何]?”演员表 到不相关的类型'[String:String?]'总是失败

Ego*_*kov 1 nsuserdefaults ios swift

我使用以下代码通过UserDefaults存储应用设置:

var appSettings: [String: String?] {

    set { // On attempt to set new value for the dictionary
        UserDefaults.standard.set(newValue, forKey: "AppSettings")
        UserDefaults.standard.synchronize()
    }
    get { // On attempt to get something from dictionary
        if let settings = UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?] {
            return settings
        } else {
            return [:]
        }
    }}
Run Code Online (Sandbox Code Playgroud)

但是行if let settings = UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?]导致警告:

从“ [任何]?”演员表 无关类型“ [String:String?]”始终失败

有什么想法如何在UerDefaults中保存此词典?

Sh_*_*han 5

取代这个

UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?]
Run Code Online (Sandbox Code Playgroud)

UserDefaults.standard.dictionary(forKey: "AppSettings") as? [String: String?]
Run Code Online (Sandbox Code Playgroud)

当您存储字典时,请不要使用.array(forKey该返回值[Any]?,以确保无法将其强制转换为[String:String?]


同样来自Docs

同步()

等待对默认数据库的所有未决异步更新并返回;此方法是不必要的,不应使用。

所以评论

UserDefaults.standard.synchronize()
Run Code Online (Sandbox Code Playgroud)