-1

I am building a small Weather app that is accessing the openweathermap API. I am using JSONDecoder to parse the JSON from the API. For the most part, I am able to get most of the data in the simulator. Except for the UIImage that is supposed to appear on the screen. The image is in the image.xcassets. Below is the struct.

import UIKit
import CoreLocation

struct WeatherData: Codable {
let coord: Coord
let weather: [Weather]
let base: String
let main: Main
let visibility: Int
let wind: Wind
let clouds: Clouds
let dt: Int
let sys: Sys
let id: Int
let name: String
let cod: Int
 }

struct Clouds: Codable {
let all: Int
}

struct Coord: Codable {
let lon, lat: Double
}

struct Main: Codable {
let temp: Double
let pressure, humidity: Int
let tempMin, tempMax: Double

//    enum CodingKeys: String, CodingKey {
 //        case temp, pressure, humidity
 //        case tempMin = "temp_min"
 / /        case tempMax = "temp_max"
 //    }
 }

struct Sys: Codable {
let type, id: Int
let message: Double
let country: String
let sunrise, sunset: Int
}

struct Weather: Codable {
let id: Int
let main, description, icon: String
}

struct Wind: Codable {
let speed: Double
let deg: Int
}

The code that accesses that passes the JSON is below:

private func getWeatherData(parameters: [String : String]) {
    guard let lat = parameters["lat"],
        let long = parameters["long"],
        let appID = parameters["appid"] else { print("Invalid parameters"); return }
    var urlComponents = URLComponents(string: "https://api.openweathermap.org/data/2.5/weather")!
    let queryItems = [URLQueryItem(name: "lat", value: lat),
                      URLQueryItem(name: "lon", value: long),
                      URLQueryItem(name: "appid", value: appID)]
    urlComponents.queryItems = queryItems

    guard let url = urlComponents.url else { return }
    URLSession.shared.dataTask(with: url) { ( data, response, err ) in
        DispatchQueue.main.async { // never, never, never sync !!
            if let err = err {
                print("Failed to get data from url:", err)
                return
            }
            guard let data = data else { return }
            do {
                let decoder = JSONDecoder()
                decoder.keyDecodingStrategy = .convertFromSnakeCase
                let city = try decoder.decode(WeatherData.self, from: data)
                print(city)
                //self.updateWeatherData(city)
               self.weatherData.description = city.weather[0].main
                self.weatherData.temperature = Int(city.main.temp - 273)
                self.weatherData.city = city.name
                self.weatherData.condition = city.weather[0].id
                 WeatherDataModel().updateWeatherIcon(condition: self.weatherData.condition)
                self.updateUIWeatherData()

            } catch {
                print(error)
                self.cityLabel.text = "Connection issues"
            }
        }
        }.resume()
}

and the function that show the data on the simulator is:

func updateUIWeatherData() {
    cityLabel.text = weatherData.city
    temperatureLabel.text = String(weatherData.temperature)
    decriptionLabel.text = String(weatherData.description)
    weatherIcon.image = UIImage(named: weatherData.weatherIconName)
}

I have looked at other example of this waring and not really sure what this means in reference to this app. Example of result of call is unused. Any help would be appreciated.

AltBrian
  • 2,392
  • 9
  • 29
  • 58
  • 1
    Once again, in your [previous question](https://stackoverflow.com/questions/55891354/keynotfoundcodingkeysstringvalue-coord-intvalue-nil) the result is clearly used. Please note the difference. – vadian Apr 29 '19 at 20:47
  • Can you explain the difference? I don’t understand. – AltBrian Apr 29 '19 at 20:51

1 Answers1

1

It seems to me like you want the line

self.weatherData.weatherIconName = WeatherDataModel().updateWeatherIcon(condition: self.weatherData.condition)

instead of

WeatherDataModel().updateWeatherIcon(condition: self.weatherData.condition)

The warning is saying you're calculating the weatherIcon, but it's not being assigned to anything (your weatherData variable)

Tom Pearson
  • 384
  • 1
  • 8