Advertisement
Guest User

Untitled

a guest
Dec 14th, 2020
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.51 KB | None | 0 0
  1. //
  2. //  ViewController.swift
  3. //  Sunny
  4. //
  5. //  Created by Ivan Akulov on 24/02/2020.
  6. //  Copyright © 2020 Ivan Akulov. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import CoreLocation
  11.  
  12. class ViewController: UIViewController {
  13.  
  14.     @IBOutlet weak var weatherIconImageView: UIImageView!
  15.     @IBOutlet weak var cityLabel: UILabel!
  16.     @IBOutlet weak var temperatureLabel: UILabel!
  17.     @IBOutlet weak var feelsLikeTemperatureLabel: UILabel!
  18.    
  19.     var networkWeatherManager = NetworkWeatherManager()
  20.     lazy var locationManager: CLLocationManager = {
  21.         let lm = CLLocationManager()
  22.         lm.delegate = self
  23.         lm.desiredAccuracy = kCLLocationAccuracyKilometer
  24.         lm.requestWhenInUseAuthorization()
  25.         return lm
  26.     }()
  27.    
  28.     @IBAction func searchPressed(_ sender: UIButton) {
  29.         self.presentSearchAlertController(withTitle: "Enter city name", message: nil, style: .alert) { [unowned self] city in
  30.             self.networkWeatherManager.fetchCurrentWeather(forRequestType: .cityName(city: city))
  31.         }
  32.     }
  33.    
  34.     override func viewDidLoad() {
  35.         super.viewDidLoad()
  36.        
  37.         networkWeatherManager.onCompletion = { [weak self] currentWeather in
  38.             guard let self = self else { return }
  39.             self.updateInterfaceWith(weather: currentWeather)
  40.         }
  41.        
  42.         if CLLocationManager.locationServicesEnabled() {
  43.             locationManager.requestLocation()
  44.         }
  45.        
  46.     }
  47.    
  48.     func updateInterfaceWith(weather: CurrentWeather) {
  49.         DispatchQueue.main.async {
  50.             self.cityLabel.text = weather.cityName
  51.             self.temperatureLabel.text = weather.temperatureString
  52.             self.feelsLikeTemperatureLabel.text = weather.feelsLikeTemperatureString
  53.             self.weatherIconImageView.image = UIImage(systemName: weather.systemIconNameString)
  54.         }
  55.     }
  56.        
  57. }
  58.  
  59. // MARK: - CLLocationManagerDelegate
  60. extension ViewController: CLLocationManagerDelegate {
  61.     func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
  62.         guard let location = locations.last else { return }
  63.         let latitude = location.coordinate.latitude
  64.         let longitude = location.coordinate.longitude
  65.        
  66.         networkWeatherManager.fetchCurrentWeather(forRequestType: .coordinate(latitude: latitude, longitude: longitude))
  67.     }
  68.    
  69.     func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
  70.         print(error.localizedDescription)
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement