Ответ API от Disease. sh. Он просто возвращает один объект, а не массив объектов.
{
"updated": 1594733467666,
"cases": 13272547,
"todayCases": 42947,
"deaths": 576485,
"todayDeaths": 1508,
"recovered": 7745927,
"todayRecovered": 54476,
"active": 4950135,
"critical": 59278,
"casesPerOneMillion": 1703,
"deathsPerOneMillion": 74,
"tests": 277118391,
"testsPerOneMillion": 35707.02,
"population": 7760893407,
"oneCasePerPeople": 0,
"oneDeathPerPeople": 0,
"oneTestPerPeople": 0,
"activePerOneMillion": 637.83,
"recoveredPerOneMillion": 998.07,
"criticalPerOneMillion": 7.64,
"affectedCountries": 215
}
Мой файл модели
// Model
// GlobalCases.swift
import Foundation
struct GlobalCases: Codable {
var updated: Int?
var cases: Int?
var active: Int?
var recovered: Int?
var deaths: Int?
var todayCases: Int?
var todayDeaths: Int?
var todayRecovered: Int?
}
Это файл для веб-сервисов.
// Web Services
// GlobalCasesAPI.swift
import Foundation
class GlobalCasesAPI {
let globalURL: String = "https://disease.sh/v3/covid-19/all"
func getGlobalCases(completion: @escaping (GlobalCases?) ->()) {
guard let url = URL(string: globalURL) else {
completion(nil)
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print("No data in response: \(error?.localizedDescription ?? "Unknown error").")
DispatchQueue.main.async {
completion(nil)
}
return
}
do{
let globalcases = try JSONDecoder().decode(GlobalCases.self, from: data)
DispatchQueue.main.async {
completion(globalcases)
}
}
catch {
print(error)
completion(nil)
}
}.resume()
}
}
Теперь мне нужна ViewModel, которая извлекает данные и форматирует их (даты и прочее). Например:
// ViewModel
// GlobalCasesViewModel.swift
import Foundation
import Combine
class GlobalCasesViewModel: ObservableObject, Identifiable {
var globalCases = GlobalCases()
let id = UUID()
var updated: NSDate {
return NSDate(timeIntervalSince1970: TimeInterval(self.globalCases.updated ?? 1594716069959))
}
var cases: Int {
return self.globalCases.cases ?? 0
}
var active: Int {
return self.globalCases.active ?? 0
}
var recovered: Int {
return self.globalCases.recovered ?? 0
}
var deaths: Int {
return self.globalCases.deaths ?? 0
}
var todayCases: Int {
return self.globalCases.todayCases ?? 0
}
var todayDeaths: Int {
return self.globalCases.todayDeaths ?? 0
}
var todayRecovered: Int {
return self.globalCases.todayRecovered ?? 0
}
}
Как мне вызвать getGlobalCases()
в ViewModel, чтобы данные загружались в модель, которая затем могла быть отформатирована, как мне нравится?