У меня есть два объекта Codable:
struct Parent: Codable {
let name: String
let children: [Child]
}
struct Child: Codable {
let name: String
}
, которые я создал, чтобы соответствовать этому json:
{
name: "test"
children: (
{
name: "test2"
},
{
name: "test3"
}
)
}
Я извлекаю json и декодирую его в Родительский объект, использующий эти методы:
func parent(_ url: String) -> AnyPublisher<Parent, Error> {
return dataFromURL(url)
.map(\.value)
.eraseToAnyPublisher()
}
struct Result<T> {
let value: T
let response: URLResponse
}
func dataFromURL<T: Decodable>(_ url: String, _ decoder: JSONDecoder = JSONDecoder()) -> AnyPublisher<Result<T>, Error> {
let request = URLRequest(url: URL(string:url)!)
return URLSession.shared
.dataTaskPublisher(for: request)
.tryMap { result -> Result<T> in
let value = try decoder.decode(T.self, from: result.data)
return Result(value: value, response: result.response)
}
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
}
Работает, но я хотел бы получить метод для получения массива дочерних объектов вместо родительского объекта, например:
func children(_ url: String) -> AnyPublisher<[Child], Error>
Но Я не знаю, что мне нужно изменить .. Любая помощь будет оценена, спасибо!