Если вы посмотрите на возвращаемый JSON, он выглядит так:
{
"status": "ok",
"sources": [{
"id": "abc-news",
"name": "ABC News",
"description": "Your trusted source for breaking news, analysis, exclusive interviews, headlines, and videos at ABCNews.com.",
"url": "https://abcnews.go.com",
"category": "general",
"language": "en",
"country": "us"
}, {
"id": "abc-news-au",
"name": "ABC News (AU)",
"description": "Australia's most trusted source of local, national and world news. Comprehensive, independent, in-depth analysis, the latest business, sport, weather and more.",
"url": "http://www.abc.net.au/news",
"category": "general",
"language": "en",
"country": "au"
},
...
Хотя существует массив источников, этот массив не является корневым.Корнем JSON является объект со строкой status
и массивом sources
.Вот почему декодер не работает.
Вам необходимо определить дополнительную структуру для обработки этого:
struct NewsResult {
let status: String
let sources: [NewsSource]
}
Затем вы декодируете этот объект:
let sourceResult = try decoder.decode(NewsResult.self, from: data)
self.sources = sourceResult.sources