Klimato 4

Overview

Klimato 4 is a highly accurate weather tool that ensures you stay prepared for any weather condition. Whether it’s a snowstorm, strong winds, sunshine, or rain, this app provides precise weather information. With forecasts for the next four days, it offers detailed hourly weather updates throughout each day. It’s the ultimate weather companion to help you navigate any weather situation.

The forecast has data about the population, coordinates, weather, and temperature of the location. This was made possible by using the OpenWeather API, where the forecast is available in JSON and XML format.

What I Have Learned

extension WeatherViewController: CLLocationManagerDelegate {

    @IBAction func locationPressed(_ sender: UIButton) {
        locationManager.requestLocation()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.last {
            locationManager.stopUpdatingLocation()
            let lat = location.coordinate.latitude
            let lon = location.coordinate.longitude
            weatherManager.fetchWeather(latitude: lat, longitude: lon)
        }
    }
}

Example of answer in JSON:

{"cod":"200","message":0,"cnt":40,"list":[{"dt":1661245200,"main":{"temp":79.29,"feels_like":79.29,"temp_min":73.18,"temp_max":79.29,"pressure":1012,"sea_level":1012,"grnd_level":1008,"humidity":83,"temp_kf":3.39},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"clouds":{"all":0},"wind":{"speed":0.78,"deg":285,"gust":1.07},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2022-08-23 09:00:00"},{"dt":1661256000,"main":{"temp":80.17,"feels_like":83.48,"temp_min":80.17,"temp_max":81.95,"pressure":1012,"sea_level":1012,"grnd_level":1010,"humidity":72,"temp_kf":-0.99},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"clouds":{"all":11},"wind":{"speed":0.72,"deg":14,"gust":1.05},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2022-08-23 12:00:00"},{"dt":1661655600,"main":{"temp":75.34,"feels_like":76.62,"temp_min":75.34,"temp_max":75.34,"pressure":1010,"sea_level":1010,"grnd_level":1007,"humidity":86,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":29},"wind":{"speed":2.19,"deg":36,"gust":2.3},"visibility":10000,"pop":0.59,"rain":{"3h":0.24},"sys":{"pod":"n"},"dt_txt":"2022-08-28 03:00:00"},{"dt":1661666400,"main":{"temp":73.63,"feels_like":74.84,"temp_min":73.63,"temp_max":73.63,"pressure":1009,"sea_level":1009,"grnd_level":1005,"humidity":88,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":19},"wind":{"speed":2.86,"deg":348,"gust":3.6},"visibility":10000,"pop":0.53,"rain":{"3h":0.56},"sys":{"pod":"n"},"dt_txt":"2022-08-28 06:00:00"}],"city":{"id":3663517,"name":"Manaus","coord":{"lat":-3.1019,"lon":-60.025},"country":"BR","population":1598210,"timezone":-14400,"sunrise":1661248923,"sunset":1661292229}}

Swift can scan JSON data and convert Swift values to JSON using the Foundation classes JSONDecoder and JSONEncoder. It is advised to create appropriate data types as structs that are an exact 1:1 replica of the JSON structure. These need to be acknowledged as complying with the Codable protocol.

import Foundation

struct WeatherData: Codable {
    let city: City
    let list: [List]
}

struct City: Codable {
    let name: String
    let country: String
    let population: Int
    let coord: Coordinates
}

struct Coordinates: Codable {
    let lat: Float
    let lon: Float
}

struct List: Codable {
    let main: Main
    let weather: [Weather]
    let dt_txt: String
}

struct Main: Codable {
    let temp: Float
    let feels_like: Float
    let temp_min: Float
    let temp_max: Float
}

struct Weather: Codable {
    let id: Int
    let description: String
}

To see more about the app visit the link below: