iosswift4xcode9.4

Get temperature of current location API swift


Can anyone help me with this API code. I got everything but one error fixed.

Here is my code:

 let APIUrl = NSURL(string:"https://api.openweathermap.org/data/2.5/weather?   lat=35&lon=150&appid=e7b2054dc37b1f464d912c00dd309595&units=Metric")
 var request = URLRequest(url:APIUrl! as URL)

 let task = URLSession.shared.dataTask(with: request as URLRequest)

 guard let data = Data else {return}

 let decoder = JSONDecoder()

 let weatherData = try decoder.decode(MyWeather, from: data)

 let ggtemp = weatherData.main?.temp
    print(ggtemp, "THIS IS THE TEMP")
        DispatchQueue.main.async {
        tempDisplay.text = String (ggtemp) + " c"
     }
 }

Image of error

Once I fix the "let data = data" error, I get an error on the "let task = URLSesss..."

Any help would be appreciated. Thanks in advance.


Solution

  • Try this code

    let APIUrl = NSURL(string:"https://api.openweathermap.org/data/2.5/weather?lat=35&lon=150&appid=e7b2054dc37b1f464d912c00dd309595&units=Metric")
    var request = URLRequest(url:APIUrl! as URL)
    request.httpMethod = "GET"
    
    let dataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
    
        if (error != nil) {
            print(error ?? "Error is empty.")
        } else {
            let httpResponse = response as? HTTPURLResponse
            print(httpResponse ?? "HTTP response is empty.")
        }
    
        guard let responseData = data else {
            print("Error: did not receive data")
            return
        }
    
        do {
    
            let weatherData = try JSONDecoder().decode(MyWeather.self, from: responseData)
            let ggtemp = weatherData.main?.temp
            print(ggtemp, "THIS IS THE TEMP")
            DispatchQueue.main.async {
                tempDisplay.text = String (ggtemp) + " c"
            }
    
        } catch  {
            print("error parsing response from POST on /todos")
            return
        }
    
    })
    
    dataTask.resume()