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

时间:2018-09-20 20:39:04

标签: ios swift nsuserdefaults

我使用此代码通过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 [:]
        }
    }}

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

  

从“ [任何]开始”?无关类型“ [String:String?]”总是失败

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

1 个答案:

答案 0 :(得分:4)

替换此

UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?]

使用

UserDefaults.standard.dictionary(forKey: "AppSettings") as? [String: String?]

在存储字典时,请不要使用.array(forKey来返回肯定会被强制转换为[Any]?的{​​{1}}


也来自Docs

synchronize()

  

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

所以发表评论

[String:String?]