Используйте старый класс JSONSerialization
для преобразования между Data
и [String: Any]
, если необходимо.Data
является кодируемым.Вы также можете использовать другой формат, например String
.Обратите внимание, что swift строго типизирован, поэтому использование enum со связанными значениями обычно предпочтительнее, чем Any
.Если целью является на самом деле запись всего сервера, а не в локальное хранилище, вы также можете просто забыть о Codable и полностью использовать JSONSerialization.
Пример:
import UIKit
import PlaygroundSupport
struct A: Codable {
let a: Int
let b: [String: Any]
enum CodingKeys: String, CodingKey {
case a
case b
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
a = try values.decode(Int.self, forKey: .a)
let data = try values.decode(Data.self, forKey: .b)
b = try JSONSerialization.jsonObject(with: data, options: []) as! [String: Any]
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(a, forKey: .a)
let data = try JSONSerialization.data(withJSONObject: b, options: [])
try container.encode(data, forKey: .b)
}
}