Как достать массив из объекта, который я получил после парсинга JSON
Я изучаю IOS и делаю свое первое приложение, работающее с API.
После запроса я получают JSON файл. Ниже небольшая вырезка из файла
{
"status": "ok",
"totalResults": 2,
"articles": [
{
"source": {
"id": 21,
"name": "someName"
},
"author": "David Waterworth",
"title": "ValidBook",
"url": "https://validbooksomehere.com/",
"urlToImage": "https://validbooksomehere.com/image",
"publishedAt": "2021-11-20T00:23:40Z",
"content": "about more"
},
{ … },
]
}
MARK - Это просто пример
Я декодирую полученные данные, код ниже
struct NewsDataModel: Codable {
let status: String
let totalResults: Int
let articles: [Article]
}
struct Article: Codable {
let source: Source
let author: String?
let title: String
let description: String
let url: String
let urlToImage: String?
let publishedAt: Date
let content: String?
}
struct Source: Codable {
let id: String?
let name: String
}
И вот тут появился такой момент. По итогу мне нужно получить массив из элементов:
author title url urlToImage
Если посмотреть на JSON структуру, то все они находятся в массиве по ключу articles, то есть, каждый элемент массива articles
Вот модель, которую мне нужно получить, чтоб заполнить View в моем проекте
struct NewsModel {
let newsTitle: String
let urlToNewsWebSite: String?
let authorWebSiteName: String
let urlToImage: String
init(newsData: NewsDataModel) {
// Как?!
}
}
Как мне в итоге получить массив объектов типа NewsModel, если я получаю единичный элемент, который в себе содержит массив объектов, которые в итоге мне нужно разложить по этой модели?
MARK - Это моей первый проект, до этого казалось все логичным и понятным, но этот момент просто выбил из колеи, первое что приходит в голову, как то использовать цикл, но как его правильно тут применить, придумать мне не удалось. Код ниже
init(newsData: NewsDataModel) {
for article in newsData.articles {
self.newsTitle = article.title
self.urlToNewsWebSite = article.url
self.authorWebSiteName = article.source.name
self.urlToNewsWebSite = article.urlToImage
}
}
Ответы (1 шт):
Нужно создать массив данных вне модели, init не нужен:
var newsArray = [NewsModel]()
for article in newsData.articles {
let news = NewsModel(
newsTitle: article.title,
urlToNewsWebSite: article.url,
authorWebSiteName: article.source.name,
urlToImage: article.urlToImage)
newsArray.append(news)
}