I dare to write here to see if you can help me with a detail that I have when making a query and download an arrangement that can have changes, in short, when making a new record I would like A new query is made to my API to download the new data. I appreciate all comments, thank you very much, greetings to all.
For this I use Model and Protocol.
CitasDetalles.swift
import UIKit
class DetallesCitas: NSObject {
var idCitaCliente: String?
var nombreCitaCliente: String?
var idClienteCita: String?
var horarioCita: String?
var fechaCita: String?
var citaStatus: String?
var citaServicio: String?
var citaBarbero: String?
override init(){
}
init(idCitaCliente: String, nombreCitaCliente: String, idClienteCita:String, horarioCita:String, fechaCita: String, citaStatus: String, citaServicio: String, citaBarbero: String) {
self.idCitaCliente = idCitaCliente
self.nombreCitaCliente = nombreCitaCliente
self.idClienteCita = idClienteCita
self.horarioCita = horarioCita
self.fechaCita = fechaCita
self.citaStatus = citaStatus
self.citaBarbero = citaBarbero
}
override var description: String{
return "idCitaCliente: \(idCitaCliente), nombreCitaCliente: \(nombreCitaCliente), idClienteCita: \(idClienteCita), horarioCita: \(horarioCita), fechaCita: \(fechaCita), citaStatus: \(citaStatus), citaServicio: \(citaServicio), citaBarbero: \(citaBarbero)"
}
}
CitasModelo.swift
import UIKit
protocol CitasModeloProtocol: class {
func itemsCitas(lasCitas: NSArray)
}
let idCliente: String = UserDefaults.standard.string(forKey: “id”)!
class CitasModelo: NSObject {
weak var elDelegado: CitasModeloProtocol!
let urlPath = "http://sistema.gents.mx/movilBackendGENTS/listaCitasCliente.php?idCliente=\(idCliente)"
func downloadItems(){
let url: URL = URL(string: urlPath)!
let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)
let task = defaultSession.dataTask(with: url){
(data, response, error) in
if error != nil{
print("Error al descargas las citas")
}else{
print("Datos descargados")
self.parseJSON(data!)
}
}
task.resume()
}
func parseJSON(_ data:Data){
var resultFromServer: Any?
resultFromServer = try? JSONSerialization.jsonObject(with: data, options: [])
if let respdict = resultFromServer as? [String : Any] {
//respone in dictionary format
var jsonDi = NSDictionary()
do{
jsonDi = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! NSDictionary
let parsedJSON = jsonDi
if parsedJSON["status"] as! String == "401"{
print(parsedJSON["message"] as! String)
}
} catch {
}
}
else if let respArr = resultFromServer as? [Any]{
//response is array type
var jsonResult = NSArray()
do{
jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! NSArray
} catch let error as NSError {
print(error)
}
var jsonElement = NSDictionary()
let detalles = NSMutableArray()
for i in 0 ..< jsonResult.count{
jsonElement = jsonResult[i] as! NSDictionary
let detalle = DetallesCitas()
let idCitaCliente = jsonElement["id"]
let nombreCitaCliente = jsonElement["usuarioCita"]
let idClienteCita = jsonElement["idCliente"]
let horarioCita = jsonElement["citaHorario"]
let fechaCita = jsonElement["citaDia"]
let citaStatus = jsonElement["statusCitas"]
let citaServicio = jsonElement["citaServicio"]
let citaBarbero = jsonElement["barberoCita"]
detalle.idCitaCliente = idCitaCliente as? String
detalle.nombreCitaCliente = nombreCitaCliente as? String
detalle.idClienteCita = idClienteCita as? String
detalle.horarioCita = horarioCita as? String
detalle.fechaCita = fechaCita as? String
detalle.citaStatus = citaStatus as? String
detalle.citaServicio = citaServicio as? String
detalle.citaBarbero = citaBarbero as? String
detalles.add(detalle)
}
DispatchQueue.main.async(execute: { ()-> Void in
self.elDelegado.itemsCitas(lasCitas: detalles)
})
}
else if let stringRespt = String(data: data, encoding: .utf8){
//resp is string
}
}
}
ListaCitasVC.swift
import UIKit
class ListaCitasVC: UIViewController, UITableViewDataSource, UITableViewDelegate, CitasModeloProtocol {
var feedItems: NSArray = NSArray()
var selectCita : DetallesCitas = DetallesCitas()
@IBOutlet weak var citasLista: UITableView!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
citasLista.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
self.citasLista.delegate = self
self.citasLista.dataSource = self
let citasModelo = CitasModelo()
citasModelo.elDelegado = self
citasModelo.downloadItems()
self.citasLista.reloadData()
// Do any additional setup after loading the view.
}
func itemsCitas(lasCitas: NSArray) {
feedItems = lasCitas
self.citasLista.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return feedItems.count
}