Из данных видно, что единственным свойством, которое имеет нулевые данные, является recovered
, поэтому вы изменяете остальные свойства на необязательные. Это облегчит вам задачу.
Я бы также порекомендовал вам использовать do/try/catch
вместо try!
.
class AllCountriesVC: UITableViewController {
struct CovidData: Codable {
let country: String
let cases: Int
let todayCases: Int
let deaths: Int
let todayDeaths: Int
let recovered: Int?
let active: Int
let critical: Int
let totalTests: Int
}
var data = [CovidData]()
override func viewWillAppear(_ animated: Bool) {
load()
}
func load() {
if let url = URL(string: "https://coronavirus-19-api.herokuapp.com/countries/") {
do {
let jsonData = try Data(contentsOf: url)
self.data = try JSONDecoder().decode([CovidData].self, from: jsonData)
self.tableView.reloadData()
}
catch {
print(error)
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count ?? 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let countryData = data[indexPath.row]
cell.textLabel?.text = countryData.country
cell.detailTextLabel?.text = String(countryData.cases)
return cell
}
}
Если вы хотите использовать дополнительный, скажем recovered
тогда вы можете использовать оператор объединения nil - ??
String(countryData.recovered ?? 0)