Я пытаюсь разобрать следующие JSON в tableView
: https://www.pathofexile.com/api/trade/data/items
Мне удалось проанализировать первый массив, но я не могу разобрать ключ "записи" ...
Вот мой код со структурой данных, которую я определил:
import UIKit
struct ItemCategories: Codable {
var result: [ItemCategory]
}
struct ItemCategory: Codable {
var label: String
var entries: [Item]
}
struct Item: Codable {
// empty struct
}
class ViewController: UITableViewController {
let urlString = "https://www.pathofexile.com/api/trade/data/items"
var categories = [ItemCategory]()
override func viewDidLoad() {
super.viewDidLoad()
title = "Path of Data"
navigationController?.navigationBar.prefersLargeTitles = true
parse()
}
func parse() {
guard let url = URL(string: urlString) else { return }
guard let data = try? Data(contentsOf: url) else { return }
let decoder = JSONDecoder()
guard let jsonItemCategories = try? decoder.decode(ItemCategories.self, from: data) else { return }
categories = jsonItemCategories.result
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
var categoryName = categories[indexPath.row].label
if categoryName == "" { categoryName = "Unknown" }
cell.textLabel?.text = categoryName
cell.textLabel?.textColor = .systemOrange
let numberOfItemsInCategory = String(categories[indexPath.row].entries.count)
cell.detailTextLabel?.text = numberOfItemsInCategory + " items"
return cell
}
}
Структура Item пуста, потому что, когда я пытаюсь добавить переменную, соответствующую введите JSON, после чего весь синтаксический анализ завершится неудачно (tableView ничего не отображает).
Когда структура Item пуста, анализ выполняется успешно, и tableView может отображать различные категории. Он даже отображает количество элементов для каждой «записи» благодаря:
let numberOfItemsInCategory = String(categories[indexPath.row].entries.count)
cell.detailTextLabel?.text = numberOfItemsInCategory + " items"
Может кто-нибудь объяснить, почему? В идеале я хотел бы отображать содержимое «записей», когда строки постукивают, но я не могу понять, как на данный момент.
Спасибо за помощь :)
снимок экрана