В ролях из «[Любой]?»к несвязанному типу '[String: String?]' всегда возникает ошибка - PullRequest
0 голосов
/ 20 сентября 2018

Я использую этот код для хранения настроек приложения через 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?] вызывает предупреждение:

Приведение из '[Any]?'на несвязанный тип '[String: String?]' всегда происходит сбой

Есть идеи, как сохранить этот словарь в UerDefaults?

1 Ответ

0 голосов
/ 20 сентября 2018

Замените это

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

на

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

, поскольку вы храните словарь, поэтому не используйте .array(forKey, который возвращает [Any]?, который точно не может быть приведенна [String:String?]


Также с Документы

synchronize ()

Ожидание любого ожидающегоасинхронное обновление базы данных по умолчанию и возврат;этот метод не нужен и не должен использоваться.

, поэтому комментируйте

UserDefaults.standard.synchronize()
...