我目前正在創建一個項目,我需要對地址進行地理編碼並將其放入座標。正如你所看到的,我已經在下面做了下面的功能來做到這一點,它的工作原理。但是,該函數返回的變量似乎並未在應用程序的其餘部分中更新。下面是我的代碼。爲什麼在異步函數後值不會更新?
var startLat: Double!
var startLong: Double!
typealias theDouble = (Double, Double) ->()
func forwardGeocodingStarting(address: String, completion: theDouble){
//your code
let aVar: Double!
let bVar: Double!
let placemark = placemarks?[0]
let location = placemark?.location
let coordinate = location?.coordinate
aVar = (coordinate?.latitude)!
bVar = (coordinate?.longitude)!
completion(aVar, bVar)
}
// CALL THIS FUNCTION
forwardGeocodingStarting(<your string address>) { firstVar, secondVar in
startLat = firstVar
startLong = secondVar
print("\(startLat) is lat and \(startLong) is long") //GET CORRECT VALUES
}
print(startLat) // GET "NIL"
print(startLong) // GET "NIL"
// ================= EDIT ==============
if startLat != 0 {
let startLatUnwrapped: Double = startLat
}
if startLong != 0 {
let startLongUnwrapped: Double = startLong
}
我需要做的是使用startLat
& startLong
在我的項目,但它似乎沒有我外面被更新調用該函數。當我在函數調用之外調用這兩個變量時,它只返回nil
。任何幫助是極大的讚賞。
'forwardGeocodingStarting'異步工作,這意味着完成塊在時間以後調用。只需將兩條「print」行或處理值的代碼放入塊中,就像另一個「print」行一樣。 – vadian