Я создаю мобильное приложение для 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.