ios - 来自“[任何]?”的演员表 到不相关的类型 '[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 中保存这本字典?
解决方案
替换这个
UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?]
和
UserDefaults.standard.dictionary(forKey: "AppSettings") as? [String: String?]
当您存储字典时,请不要使用.array(forKey
which 返回[Any]?
肯定不能转换为[String:String?]
也来自Docs
同步()
等待对默认数据库的任何挂起的异步更新并返回;这种方法是不必要的,不应该使用。
所以评论
UserDefaults.standard.synchronize()
推荐阅读
- c++ - 为什么有时只需要包含标题?
- javascript - 如何从 React 函数访问输入元素
- ubuntu - 这是在 Ubuntu 20.04 上分发 Ansible 的正确方法吗?
- wordpress - WordPress 恶意软件/top:0;左:-9999px URL
- python - 通过 Python 在 SQL 查询中使用通配符和特殊字符
- python - 如何在kivy中短时间显示标签?
- reactjs - 如何让 React 将数字附加到变量?
- python - 如何绘制具有不同内核的 SVM 的决策边界?(3个类,3个特征)
- r - 为什么 switch("d", a = 1, b = 2) 不给出任何警告、错误或输出?
- azure - 在常规 Azure AD 租户中创建 Azure AD B2C 应用注册的目的是什么?