Парсинг Json, с вложенной ссылкой еще на один Json


#1

Приветстую

Подскажите как распарсить json, в котором ссылка еще на один json, в одном запросе. Посколку я заполняю из этого Json CollectionView, и если делать второй запрос, то надо делать костыли с корректным отображением картинок к ячейкам. Ситуация следующая

  1. У меня структура файла
struct Headline: Codable {
    var articles: [Article]
}
struct Article: Codable {
    let id: Int?
    let date, dateGmt: String?
    let links: Links?

    enum CodingKeys: String, CodingKey {
        case id, date
        case dateGmt = "date_gmt"
        case links = "_links"
    }
}
struct Links: Codable {
    let linksSelf, collection, about: [About]? // []
    let wpFeaturedmedia: [Author]?

    enum CodingKeys: String, CodingKey {
        case linksSelf = "self"
        case collection, about, author, replies
        case wpFeaturedmedia = "wp:featuredmedia"
    }
}
struct Author: Codable {
    let embeddable: Bool?
    let href: String?

    enum CodingKeys: String, CodingKey {
        case href
        case embeddable
    }
}

В структуре Author находится href, в котором ссылка еще на один JSON, с которого мне надо достать ссылку

Получаю я все это стандартно

static func getArticles(url: URL?, completion: @escaping ([Article]?) -> Void) {
    url?.get(completion: { (result: Result<[Article], ApiError>) in
        switch result {
        case .success(let headline):
            print("\n News Api extension getArticles headline \(String(describing: headline.count))")
            completion(headline)
        case .failure(_):
            print("\n News Api getArticles failure")
            completion(nil)
        }
    })
}

#2

Это называется кривой бэкенд.
Совет на будущее, не делайте так, данные нужно получать одним запросом.

Для вашего варианта выход один: делать запросы внутри класса ячейки, что бы их можно было отменять, когда ячейка пропала. Так же надо делать кеширование, что бы не грузить одни и те же ссылки по несколько раз.


#3

Я согласен, это Wordpress. Понял Ваш ответ. Спасибо как всегда за опыт. Буду пробывать