所以我正在执行GET请求并解析JSON以获取当前位置,所有这些都在locationManager函数中完成。 现在我有一个UILabel出口,我想根据JSON的结果将所有时间一直更新到地图上显示的当前位置(确实是反向地理编码),但是如果我通过locationManager访问label.text,我会有一个延迟+ Xcode告诉我,只能通过主线程完成。
所以我尝试制作一个全局变量并在locationManager中对其进行更新,但是当我访问viewDidLoad()中的label.text并将其提供给全局变量时,它保持为空(初始值)
对此有什么可能的解决方法?
var addrs = "" // the global variable
...
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
//Code
addrs = result.response.view[0].result[0].location.address.label
} .resume()
override func viewDidLoad() {
super.viewDidLoad()
locationLabel.text = ("Your Current Location Is :" + addrs)
}
答案 0 :(得分:2)
注意:始终仅在主线程上更新用户界面。使用下面的代码来解决您的问题。
DispatchQueue.main.async { [weak self] in
addrs = result.response.view[0].result[0].location.address.label
self?.locationLabel.text = ("Your Current Location Is :" + addrs)
}