Show API Data in a View without ID

Viewed 41

I have a small weather project and I got stuck in the phase where I have to show the results from the API in a view. The API is from WeatherAPI. I mention that the JSON file doesn't have an id and I receive the results in Console. What is the best approach for me to solve this problem? Thank you for your help!

This is the APIService.

import Foundation

class APIService: ObservableObject {

    func apiCall(searchedCity: String) {
     let apikey = "secret"
    guard let url = URL(string: "https://api.weatherapi.com/v1/current.json?key=\(apikey)&q=\(searchedCity)&aqi=no") else {
        return
    }
    
    var request = URLRequest(url: url)
    
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-type")
    
    let task = URLSession.shared.dataTask(with: request) { data, _, error in
        guard let data = data, error == nil else {
            return
        }
        do {
            let response = try JSONDecoder().decode(WeatherModel.self, from: data)
            
            print(response)
            print("SUCCESS")
        }
        catch {
            print(error)
        }
    }
    task.resume()
    }
}

This is the ForecastModel

import Foundation

struct WeatherModel: Codable {
    var location: Location
    var current: Current
}

struct Location: Codable {
    var name: String
}
struct Current: Codable, {
    var temp_c: Decimal
    var wind_kph: Decimal
}

Here is the view where I want to call.

import SwiftUI

struct WeatherView: View {
    
  
    @StateObject var callApi = APIService()
    @Binding var searchedCity: String

    
    var body: some View {
        NavigationView {
            ZStack(alignment: .leading) {
                Color.backgroundColor.ignoresSafeArea(edges: .all)
                VStack(alignment: .leading, spacing: 50) {
                    
                comparation
                temperature
                clothes
                Spacer()
                
                }
                .foregroundColor(.white)
                .font(.largeTitle)
                .onAppear(perform: {
                    self.callApi.apiCall(searchedCity: "\(searchedCity)")
                })
                
            }
            
        }
                
    }
}

struct WeatherView_Previews: PreviewProvider {
    @State static var searchedCity: String = ""
    static var previews: some View {
        WeatherView(searchedCity: $searchedCity)
    }
}

fileprivate extension WeatherView {
    
    var comparation: some View {
        
        Text("Today is  ")
            .fontWeight(.medium)
    }
    
    var temperature: some View {
        Text("It is ?C with ? and ? winds")
            .fontWeight(.medium)
    }
    
    var clothes: some View {
        Text("Wear a ?")
            .fontWeight(.medium)
    }
}
0 Answers
Related