Я хочу кодировать словарь в json с помощью JSONEncoder. Это похоже на запрос, получите словарь как параметр и закодируйте его в json как тело http. Код выглядит так:
let dict = ["name": "abcde"]
protocol Request {
var params: [String: Encodable] { get set }
func encode<T>(_ value: T) throws -> Data where T : Encodable
}
extension Request {
func encode<T>(_ value: T) throws -> Data where T : Encodable {
return try JSONEncoder().encode(value)
}
var body: Data? {
if let encoded = try? self.encode(self.params) {
return encoded
}
return nil
}
}
struct BaseRequest: Request {
var params: [String : Encodable]
}
let req = BaseRequest(params: dict)
let body = req.body
Но в этом коде возникает ошибка
Неустранимая ошибка: Dictionary ‹String, Encodable> не соответствует Encodable, потому что Encodable не соответствует самому себе. Вы должны использовать конкретный тип для кодирования или декодирования.
Как я мог сделать это кодируемым?
JSONSerializer
? Вы хотите предотвратитьAny
зависимости? - person Timofey Solonin   schedule 31.01.2018Any
, а один из нескольких известных типов, верно? Часто лучшим решением этого является создание перечисления с этими типами в качестве связанных значений, что подтверждаетEncodable
. - person Itai Ferber   schedule 31.01.2018