#ios #json #swift
Вопрос:
Каждый раз, когда я пытаюсь использовать код, способный анализировать json, я всегда сталкиваюсь с проблемой, связанной с тем, что в моем представлении таблицы или коллекции не отображаются данные. Возьмем, к примеру, приведенный ниже код; Я подключаюсь к newsAPI, чтобы отобразить поле «заголовок» в моем табличном представлении. У меня есть моя модель данных, установленная вместе с сетевым кодом в функции запроса. При запуске кода он не показывает значения; Как это исправить ? ссылка на проект:https://github.com/lexypaul13/Наса
struct ArticleData:Codable{
var status: String
var totalResults: String
var article: [Article]
}
struct Article: Codable {
var title:String?
var unwrappeTitle:String{
return "(title ?? "No value")"
}
}
func request(){
let website = "https://newsapi.org/v2/everything?q=teslaamp;from=2021-05-21amp;sortBy=publishedAtamp;apiKey=d32071cd286c4f6b9c689527fc195b03"
if let url = URL.init(string: website){
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
if let data = data{
do {
let parsedJsons = try? JSONDecoder().decode(ArticleData.self, from: data )
DispatchQueue.main.async {
self.information = parsedJsons?.article ?? []
self.tableView.reloadData()
}
}catch{
print(error)
}
}
})
task.resume()
}
}
Комментарии:
1. Откуда вы взяли код? Какой бы пример ни рекомендовал использовать
try?
, его необходимо найти и исправить.
Ответ №1:
Вы должны изменить свое try?
значение на try
так, чтобы ваш catch
блок вызывался при ошибке декодирования, и вы получите полезный вывод.
Как только вы это сделаете и ошибки декодирования будут напечатаны, вы увидите, что у вашей ArticleData
структуры есть пара проблем , а именно, что totalResults
она должна быть Int
не a String
и article
должна быть переименована в articles
:
struct ArticleData: Codable{
var status: String
var totalResults: Int
var articles: [Article]
}
Комментарии:
1. Хотел бы я знать, какой учебник или пример используют люди, которые советуют им использовать
try ?
, чтобы мы могли выследить его и убить! 99%Codable
вопросов можно было бы избежать, если бы люди использовалиtry
и печатали полезную ошибку, которую предоставляет декодер.2. Спасибо вам за помощь. Чтобы уточнить, переменные в данных статьи структуры должны иметь тип и имя как сам json, правильно ?
3.@MayowaPaul Это правильно. Если вы хотите использовать для свойств другие имена, чем в JSON, ваша структура может включать перечисление, соответствующее протоколу CodingKeys, для получения дополнительной информации см. раздел «Выбор свойств для кодирования и декодирования с использованием ключей кодирования » здесь.