Я написал следующий код, который извлекает данные из API Dark Sky.Я анализирую его с помощью SwiftyJSON, но тогда я не могу заставить свой ярлык пользовательского интерфейса «ветер» отображать скорость ветра.
Я думаю, что ошибка может быть в моем разборе.Я использовал JSON-кодировщик, чтобы найти параметр, который я хочу получить, например, windSpeed, но я не знаю, ошиблась ли эта часть или она обновляет сам интерфейс.Когда я делаю запрос get для API, я также получаю несколько экземпляров запроса, так что, возможно, проблема также связана с этим?
Мой код выглядит следующим образом:
import UIKit
import CoreLocation
import Alamofire
import SwiftyJSON
class ViewController: UIViewController, CLLocationManagerDelegate {
let base_URL = "https://api.darksky.net/forecast/[API Key here]/"
//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.startUpdatingLocation()
}
//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!)
print(windJSON)
self!.updateWindData (json: windJSON)
} else {
print("Error \(String(describing: response.result.error))") }
self?.wind.text = "Connection issues"
}
}
//MARK: - JSON Parsing
/***************************************************************/
//
// //Write the updateWeatherData method here:
func updateWindData(json: JSON) {
let windSpeed = json["currently"]["windSpeed"].doubleValue
windDataModel.speed = Double(windSpeed)
updateUIWithWindData()
}
//// //Write the updateUIWithWeatherData method here:
func updateUIWithWindData() {
wind.text = "\(windDataModel.speed)"
//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"
}
}
}