Я обнаружил, что это расширение использует Codable для сохранения в NSUserDefaults.
extension UserDefaults {
func decode<T : Codable>(for type : T.Type, using key : String) -> T? {
let defaults = UserDefaults.standard
guard let data = defaults.object(forKey: key) as? Data else {return nil}
let decodedObject = try? PropertyListDecoder().decode(type, from: data)
return decodedObject
}
func encode<T : Codable>(for type : T, using key : String) {
let defaults = UserDefaults.standard
let encodedData = try? PropertyListEncoder().encode(type)
defaults.set(encodedData, forKey: key)
defaults.synchronize()
}
}
Но как я вижу у меня ошибка Type 'OfflineRequest' does not conform to protocol 'Decodable'
похоже из-за Any
.
У меня есть следующая структура, которую я хочу сохранить:
struct OfflineRequest: Codable {
let url: String
let params: [String: Any]
}
Идея состоит в том, чтобы постоянно хранить стек (массив) запросов, которые не увенчались успехом из-за каких-либо проблем с подключением. Итак, у меня есть модель данных Core Data, и я преобразовываю ее свойства в [String: Any] перед отправкой на сервер. Но теперь я хочу создать автономный первый алгоритм. Поэтому, если пользователь не в сети, я хочу, чтобы URL-адрес и параметры постоянного хранилища были [String: Any]. Как правильно обращаться с does not conform to protocol 'Decodable'
в этом случае?