Мне просто любопытно, как я могу закодировать словарь с ключом String
и значением Encodable
в JSON.
Например:
let dict: [String: Encodable] = [
"Int": 1,
"Double": 3.14,
"Bool": false,
"String": "test"
]
Все ключи в этом dict
относятся к типу String
, но типы значений различаются.
Однако все эти типы разрешены в JSON.
Мне интересно, есть ли способ использовать JSONEncoder
в Swift 4 для кодирования этого dict
в JSON Data
.
Я понимаю, что есть другие способы добиться этого без использования JSONEncoder
, но мне просто интересно, способен ли JSONEncoder
справиться с этим.
У Dictionary
есть func encode(to encoder: Encoder) throws
в расширении, но это применимо только для ограничения Key: Encodable, Key: Hashable, Value: Encodable
, тогда как для нашего dict
требуется ограничение Key: Encodable, Key: Hashable, Value == Encodable
.
Иметь struct
для этого будет достаточно, чтобы использовать JSONEncoder
,
struct Test: Encodable {
let int = 1
let double = 3.14
let bool = false
let string = "test"
}
Однако мне интересно узнать, можно ли это сделать без указания конкретного типа, а только с протоколом Encodable
.
Codable
сильно зависит от конкретных типов.encode(
– это универсальный метод, который ожидает конкретный тип, соответствующийEncodable
, а не самому протоколу. - person vadian   schedule 20.07.2018