Синтаксический анализ JSON с помощью SwiftyJSON - проблема с обновлением пользовательского интерфейса - PullRequest
0 голосов
/ 17 января 2019

Я написал следующий код, который извлекает данные из 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"
        }

    }
}

1 Ответ

0 голосов
/ 17 января 2019

У вас есть некоторые брекеты не к месту, это все.

func updateUIWithWindData() {

  wind.text = "\(windDataModel.speed)"

После этой функции поместите конечную скобку сразу после wind.text = "... У вас есть конечная скобка в нижней части класса.

Кроме того, у вас есть еще одна скобка с этим оператором else:

else {
  print("Error \(String(describing: response.result.error))") }
  self?.wind.text = "Connection issues"

Скобка в конце строки print("Error... должна быть перемещена после "Connection issues".

Исправьте это, и ваш код должен работать нормально.

...