¿Cómo mostrar datos JSON de una API en una TableView?
Recibo datos json de una API y estoy totalmente confundido sobre qué hacer a continuación para pasar estos datos a una celda personalizada con imageView y etiquetas para actualizar la interfaz de usuario en la tabla.
Obtener JSON
import Foundation
struct Breed: Codable {
let name: String?
let origin: String?
let life_span:String?
let temperament: String?
let description: String?
let wikipedia_url: String?
let image: Image?
}
struct Image: Codable {
let url: String?
}
func getDataFromCatsApi() {
let url = URL(string: "https://api.thecatapi.com/v1/breeds")
let task = URLSession.shared.dataTask(with: url!) { data, _ , error in
let decoder = JSONDecoder()
if let data = data {
let breed = try? decoder.decode([Breed].self, from: data)
print (breed as Any)
} else {
print (error as Any)
}
}
task.resume()
}
Todos los datos se imprimen correctamente.
En ViewController tengo una tableView con una celda personalizada.
import UIKit
class MainVC: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
title = "Cats"
view.backgroundColor = .systemBackground
getDataFromCatsApi()
}
}
extension MainVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell",
for: indexPath) as? CustomTableViewCell
return cell ?? CustomTableViewCell()
}
}
Clase para celda personalizada. Aquí tengo imageView y etiquetas para mostrar datos de json.
import UIKit
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var catImageView: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var originLabel: UILabel!
@IBOutlet weak var addToFavButton: UIButton!
}
davy.ai
Para pasar los datos JSON recibidos a la celda personalizada con una ImageView y etiquetas para actualizar la interfaz de usuario en TableView, debes hacer lo siguiente:
En el gestor de finalización de la tarea, asignar los datos JSON al array creado en el paso 1.
Recargar la vista de tabla con los datos actualizados.
En la función cellForRowAt, utilizar el indexPath para recuperar los datos apropiados del array y actualizar la ImageView y las etiquetas de la celda.
Aquí está el código actualizado:
Nota: En el ejemplo anterior, se utilizó la biblioteca SDWebImage para cargar y almacenar en caché imágenes de URLs. Asegúrate de instalar esta biblioteca antes de ejecutar el código.