Допустим, я хочу получать новостные статьи с сайта A и сайта B, каждая с разным URL и различной структурой JSON полезных нагрузок. Вместо двух разных моделей управления я хочу объединить их в единую модель данных «Статьи», которая получает данные от каждого из API. Я хочу знать, если это возможно, используя CodingKeys или словарь или что-то.
Я хочу сделать что-то вроде:
struct Article: Codable, Hashable {
var title: String
var site: String
var date: String
var image: String
var url: String
}
, а затем иметь CodingKeys для преобразования JSON из каждый сайт в общую модель. Что-то вроде:
extension Article {
enum CodingKeys: String, CodingKey {
var title = "title"
var site = "site_name"
var date = "date_published"
var image = "featured_image_url"
var url = "article_url"
}
Но проблема с приведенным выше кодом заключается в том, что каждый JSON отличается, с разными именами для объектов. Итак, я хочу сделать что-то вроде:
enum DataSource {
case siteA
case siteB
}
extension Article {
enum CodingKeys: String, CodingKey {
switch DataSource {
case siteA:
var title = "title"
var site = "site_name"
var date = "date_published"
var image = "featured_image_url"
var url = "article_url"
case siteB:
var title = "article_title"
var site = "site_name_long"
var date = "published_date"
var image = "featured_image"
var url = "url"
}
и затем, конечно, сделать все вещи JSONdecoder ниже этого. Как я могу это сделать?