Как кодировать декодировать структуру, содержащую словарь - PullRequest
0 голосов
/ 27 января 2020

Я хочу сделать struct Codable, чтобы я мог записывать содержимое в файл

   struct LocationDetails: Codable {
    var locationId: String? = nil
    var providerId: String? = nil
    var locationDict = [String:Any]()
    var providerDict = [String:Any]()
   }

Дает ошибку: Тип LocationDetails не соответствует протоколу Decodable.

Вместо словаря, если я использую массив и кодирую / декодирую структуру с помощью PropertyListEncoder и PropertyListDecoder, это работает нормально. Но даже не позволит мне определить словарь внутри кодируемой структуры. Как сделать структуру с помощью словаря Кодируемой?

1 Ответ

0 голосов
/ 27 января 2020

Вы можете определить структуру с помощью обобщений следующим образом, чтобы удалить тип Any и ограничить типы словаря значение теми, которые соответствуют Codable.

Кстати: если вы Сохраняете только (не загружаете), вы должны использовать Encodable, а не Codable.

struct LocationDetails<Location: Codable, Provider: Codable>: Codable {
 var locationId: String? = nil
 var providerId: String? = nil
 var locationDict = [String:Location]()
 var providerDict = [String:Provider]()
}
...