Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- import CoreLocation
- import Alamofire
- import SwiftyJSON
- class ViewController: UIViewController, CLLocationManagerDelegate {
- let base_URL = "https://api.darksky.net/forecast/[API Key]/"
- //Instance variable
- let locationManager = CLLocationManager()
- let windDataModel = WindDataModel()
- @IBOutlet weak var windDirectionArrow: UIImageView!
- @IBOutlet weak var yard: UILabel!
- @IBOutlet weak var gust: UILabel!
- @IBOutlet weak var wind: UILabel!
- override func viewDidLoad() {
- super.viewDidLoad()
- //Location manager set up
- locationManager.delegate = self
- locationManager.desiredAccuracy = kCLLocationAccuracyBest
- locationManager.requestWhenInUseAuthorization()
- locationManager.startUpdatingHeading()
- locationManager.startUpdatingLocation()
- }
- //Update location heading and course
- func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
- print (newHeading.trueHeading)
- }
- //Get wind data method
- func getWindData(url: String, latitude: String, longitude: String) {
- let urlStr = "(base_URL)(latitude),(longitude)"
- Alamofire.request(urlStr, method: .get, parameters:nil, encoding: JSONEncoding.default).responseJSON { [weak self]
- response in
- if response.result.isSuccess {
- print("Success! Got the weather data")
- let windJSON : JSON = JSON(response.result.value!)
- self!.updateWindData (json: windJSON)
- }
- else {
- print("Error (String(describing: response.result.error))")
- self?.wind.text = "Connection issues" }
- }
- }
- //Write the updateWeatherData method here:
- func updateWindData(json: JSON) {
- let windSpeed = json["currently"]["windSpeed"].intValue
- windDataModel.speed = windSpeed
- let windGust = json["currently"]["windGust"].intValue
- windDataModel.gust = windGust
- let windBearing = json["currently"]["windBearing"].doubleValue
- windDataModel.bearing = windBearing - newHeading.trueHeading
- windDataModel.arrow = windDataModel.updateArrowIcon(bearing: windDataModel.bearing)
- updateUIWithWindData()
- }
- //Write the updateUIWithWeatherData method here:
- func updateUIWithWindData() {
- wind.text = "Wind (windDataModel.speed) MPH"
- gust.text = "Gusts (windDataModel.gust) MPH"
- yard.text = String(windDataModel.bearing)
- windDirectionArrow.image = UIImage(named: windDataModel.arrow)
- }
- //Did update method
- func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
- let location = locations[locations.count - 1]
- if location.horizontalAccuracy > 0 {
- self.locationManager.stopUpdatingLocation()
- self.locationManager.delegate = nil
- let latitude = String(location.coordinate.latitude)
- let longitude = String(location.coordinate.longitude)
- getWindData(url: base_URL, latitude: latitude, longitude: longitude)
- }
- }
- //Did fail with error method
- func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
- print(error)
- wind.text = "Error"
- }
- }
Add Comment
Please, Sign In to add comment