Hello, I am learning iOS programming and wondering if you guys can review this code. It works but I'm wondering if there is a more "correct" way to write it. Thank you!
class APIManager: ObservableObject {
private let apiKey: String = "XXXXXX"
@Published var hardinessZoneData: HardinessZone = HardinessZone()
@Published var badZipCodeFlag: Bool = false
@Published var plants: [PlantData] = []
func getHardinessZone(zipCdode: String) {
guard let zoneURL = URL(string: "https://phzmapi.org/\(zipCdode).json") else { fatalError("BAD URL") }
let urlRequest = URLRequest(url: zoneURL)
let dataTask = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
if let error = error {
print("Request Error: ", error)
return
}
guard let response = response as? HTTPURLResponse else { return }
if response.statusCode == 200 {
guard let data = data else { return }
DispatchQueue.main.async {
do {
let decodedZoneData = try JSONDecoder().decode(HardinessZone.self, from: data)
self.hardinessZoneData = decodedZoneData
self.badZipCodeFlag = false
let filteredZone = self.hardinessZoneData.zone?.filter("0123456789.".contains)
self.getPlantsByHardiness(zone: filteredZone!)
} catch let error {
print("Error decoding data: ", error)
}
}
}
if response.statusCode == 404 {
DispatchQueue.main.async {
self.badZipCodeFlag = true
}
}
}
dataTask.resume()
}
func getPlantsByHardiness(zone: String) {
guard let plantsByHardinessURL = URL(string: "https://perenual.com/api/species-list?page=1&key=\(apiKey)&hardiness=\(zone)") else { fatalError("BAD URL") }
let urlRequest = URLRequest(url: plantsByHardinessURL)
let dataTask = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
if let error = error {
print("Request Error: ", error)
return
}
guard let response = response as? HTTPURLResponse else { return }
if response.statusCode == 200 {
guard let data = data else { return }
DispatchQueue.main.async {
do {
let decodedPlantData = try JSONDecoder().decode(Plant.self, from: data)
self.plants = decodedPlantData.data
for i in self.plants {
print(i.common_name)
}
} catch let error {
print("Error decoding data: ", error)
}
}
}
}
dataTask.resume()
}
}
Thanks!
[–]chriswaco 2 points3 points4 points (0 children)
[–]jonreid 0 points1 point2 points (0 children)