Направление ветра и компас Мобильное приложение iPhone вытягивает местоположение пользователя, но информация о курсе не отображается в интерфейсе пользователя. - PullRequest
0 голосов
/ 24 марта 2019

Я создаю мобильное приложение для iPhone, которое принимает текущее местоположение пользователя и курс iPhone и использует эту информацию для отображения направления ветра и ветра, а также направления iPhone относительно местоположения и курса пользователя. Пользовательский интерфейс для метки ветра и порыва обновляется через запрос .get к darksky API. Сейчас я хочу обновить ярлык пользовательского интерфейса 'yard' с информацией о заголовке. (Позже я буду использовать информацию о направлении и направлении ветра для расчета направления ветра относительно пользователя, но это не требование этого поста). Проблема в этом примере заключается в том, что я не могу получать и отображать информацию о курсе через приложение.

Я открыл отдельный проект и использовал:

func locationManager (_ manager: CLLocationManager, заголовок didUpdateHeading: CLHeading) { печать (heading.trueHeading) Heading.text = String (heading.trueHeading)

Это сработало, чтобы показать информацию о заголовке, но когда я попытался включить ее в свой исходный код и отобразить ее через метку пользовательского интерфейса «ярд», пользовательский интерфейс не отображает информацию о заголовке. Я не уверен, что проблема в том, что я не получаю информацию о заголовке или обновление UI не работает.

импорт UIKit импортировать CoreLocation импорт Alamofire импорт SwiftyJSON

    class ViewController: UIViewController, CLLocationManagerDelegate {

    let base_URL = "https://api.darksky.net/forecast/........

        //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
            if CLLocationManager.headingAvailable() {
                locationManager.headingFilter = kCLLocationAccuracyBest
                locationManager.startUpdatingHeading()
                locationManager.startUpdatingLocation()
                locationManager.delegate = self

            }}


        //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?.yard.text = "Connection issues" }
            }

        }

// MARK: - Разбор JSON // ************************************************ *************

        //Write the updateWindData 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

            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 = heading.trueHeading
            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.delegate = nil

                let latitude = String(location.coordinate.latitude)
                let longitude = String(location.coordinate.longitude)

                getWindData(url: base_URL, latitude: latitude, longitude: longitude)


                func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) {
                print (heading.trueHeading)

                }
            }
        }

}

Я хочу, чтобы на ярлыке пользовательского интерфейса ярда отображался заголовок iPhone.

...