首页 > 解决方案 > 来自“[任何]?”的演员表 到不相关的类型 '[String : String?]' 总是失败的问题

问题描述

我使用此代码通过 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 中保存这本字典?

标签: iosswiftnsuserdefaults

解决方案


替换这个

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

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

当您存储字典时,请不要使用.array(forKeywhich 返回[Any]?肯定不能转换为[String:String?]


也来自Docs

同步()

等待对默认数据库的任何挂起的异步更新并返回;这种方法是不必要的,不应该使用。

所以评论

UserDefaults.standard.synchronize()

推荐阅读