TL;DR
Есть ли способ, которым я могу использовать JSONDecoder
и написать функцию, которая будет просто считывать из заданного json заданного значения поля указанного декодируемого типа?
У меня есть следующий json:
{
"product":{
"name":"PR1",
"price":20
},
"employee":{
"lastName":"Smith",
"department":"IT",
"manager":"Anderson"
}
}
И у меня есть 2 структуры Decodable
:
struct Product: Decodable {
var name: String
var price: Int
}
struct Employee: Decodable {
var lastName: String
var department: String
var manager: String
}
Я хочу написать функцию
func getValue<T:Decodable>(from json: Data, field: String) -> T { ... }
так что я могу назвать это так:
let product: Product = getValue(from: myJson, field: "product")
let employee: Employee = getValue(from: myJson, field: "employee")
Возможно ли это с JSONDecoder
или я должен возиться с JSONSerialization
, сначала прочитать «поддерево» данного json, а затем передать его декодеру? Определение структур внутри универсальных функций, по-видимому, не разрешено в Swift.