I want to link the decoded JSON
to my UILabels
in my view. How can I do that?
the struct given below is which I have decoded below and able to print it out. But I try to link labels to those decoded data.
struct Details:Decodable{
var deaths : Int
var recovered : Int
var active : Int
var critical : Int
var cases : Int
var tests:Int
var todayCases:Int
var todayDeaths:Int
var todayRecovered:Int
}
I did the parsing in viewDidLoad
class ViewController: UIViewController {
var detailData:Details!
@IBOutlet weak var infected: UILabel!
@IBOutlet weak var active: UILabel!
@IBOutlet weak var recovered: UILabel!
@IBOutlet weak var death: UILabel!
@IBOutlet weak var totalTested: UILabel!
//MARK: - View DID LOAD
override func viewDidLoad() {
super.viewDidLoad()
//MARK: - BASIC EDIT
title = "Neporona"
let group = [infected,active,recovered,death,totalTested]
for i in group{
i!.layer.masksToBounds = true
i!.layer.cornerRadius = 20
}
//MARK: - JSON DECODING
guard let url = URL(string: "https://corona.lmao.ninja/v2/countries/nepal?yesterday=false") else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do{
let decoder = try JSONDecoder().decode(Details.self, from: data)
self.detailData = decoder
print(self.detailData!)
}
catch{
print(error.localizedDescription)
}
}.resume()
}
}
You can update labels on didSet
of detailData
as below,
var detailData:Details! {
didSet {
DispatchQueue.main.async {
self.infected.text = String(self.detailData.cases)
self.active.text = String(self.detailData.active)
self.recovered.text = String(self.detailData.recovered)
}
}
}