Ios 从“[Any]?”转换为不相关的类型“[String:String?]”总是失败

Ios 从“[Any]?”转换为不相关的类型“[String:String?]”总是失败,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我使用此代码通过UserDefault存储应用程序设置: var appSettings: [String: String?] { set { // On attempt to set new value for the dictionary UserDefaults.standard.set(newValue, forKey: "AppSettings") UserDefaults.standard.synchronize() } ge

我使用此代码通过UserDefault存储应用程序设置:

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 [:]
        }
    }}
但是如果let settings=UserDefaults.standard.arrayWorkey:AppSettings为?[字符串:字符串?]导致警告:

从“[Any]?”转换为不相关类型“[String:String?]”总是失败

你知道如何用默认值保存这本词典吗?

替换它

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

在存储字典时,不要使用返回[Any]的.arrayWorkey?当然不能将其转换为[String:String?]

也来自

同步化

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

所以评论

UserDefaults.standard.synchronize()
替换这个

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

在存储字典时,不要使用返回[Any]的.arrayWorkey?当然不能将其转换为[String:String?]

也来自

同步化

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

所以评论

UserDefaults.standard.synchronize()

为什么字典的值是可选字符串?通常情况下,您只需省略该键,因此在访问该键时返回nil,因此您将使用[String:String]UserDefaults,它广泛基于Objective-C。在ObjC字典中,无论如何都不支持nil值。明白了,谢谢:为什么字典的值是可选字符串?通常情况下,您只需省略该键,因此在访问该键时返回nil,因此您将使用[String:String]UserDefaults,它广泛基于Objective-C。在ObjC字典中,无论如何都不支持零值。明白了,谢谢: