我只是想获得城市的纬度和经度。但是在alamofire完成请求之前,我收到了0.0的定义值,这不是我想要的值。我确实获得了经度和纬度的值,但已经传递了0.0,所以应用程序仅接受该值。
我尝试了完成块,但是没有成功。我在这里和那里尝试了一些小技巧,但没有任何效果。我应该如何改善呢?
func getAddress(address:String){
let key : String = "<API_KEY>"
let postParameters:[String: Any] = [ "address": address,"key":key]
let url : String = "https://maps.googleapis.com/maps/api/geocode/json"
var lat = 0.0
var long = 0.0
Alamofire.request(url, method: .get, parameters: postParameters, encoding: URLEncoding.default, headers: nil).responseJSON {
response in if let receivedResults = response.result.value
{
let resultParams = JSON(receivedResults)
print(resultParams["status"]) // OK, ERROR
lat = resultParams["results"][0]["geometry"]["location"]["lat"].doubleValue// approximately latitude
long = resultParams["results"][0]["geometry"]["location"]["lng"].doubleValue // approximately longitude
print("Here i am \(self.destLatitude)")
}
self.destLatitude = lat
self.destLongitude = long
print("Here i am also \(self.destLatitude)")
}
}
预期输出是一个地方的经度和纬度。
答案 0 :(得分:2)
网络请求异步工作,将值分配给完成处理程序中的属性
Alamofire.request(url, method: .get, parameters: postParameters, encoding: URLEncoding.default, headers: nil).responseJSON {
response in if let receivedResults = response.result.value
{
let resultParams = JSON(receivedResults)
print(resultParams["status"]) // OK, ERROR
lat = resultParams["results"][0]["geometry"]["location"]["lat"].doubleValue// approximately latitude
long = resultParams["results"][0]["geometry"]["location"]["lng"].doubleValue // approximately longitude
self.destLatitude = lat
self.destLongitude = long
print("Here i am \(self.destLatitude)")
}
}
答案 1 :(得分:-1)
您可以尝试以下方法:
let group = DispatchGroup()
group.enter()
Alamofire.request(url, method: .get, parameters: postParameters, encoding: URLEncoding.default, headers: nil).responseJSON {
response in if let receivedResults = response.result.value {
let resultParams = JSON(receivedResults)
print(resultParams["status"]) // OK, ERROR
lat = resultParams["results"][0]["geometry"]["location"]["lat"].doubleValue// approximately latitude
long = resultParams["results"][0]["geometry"]["location"]["lng"].doubleValue // approximately longitude
print("Here i am \(self.destLatitude)")
group.leave()
}
group.notify(queue: .global(qos: .userInitiated)) {
self.destLatitude = lat
self.destLongitude = long
print("Here i am also \(self.destLatitude)")
}