我有一个Double函数返回数组。似乎函数调用使数组索引跳动,因为存储在函数内部数组的每个元素中的值仅存在于{}中,但返回的值为null。
我想获得单独的经度和纬度值,所以我想获得2个不同的值
func getLongLatitudeFromAddress(address:String)-> [Double]
{
var lonLatArray = [Double]()
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) {
placemarks, error in
let placemark = placemarks?.first
lonLatArray.append( (placemark?.location?.coordinate.latitude)!)
lonLatArray.append ((placemark?.location?.coordinate.longitude)!)
//the lonLatArray printed values inside here
print("Lat: \(lonLatArray[0]), Lon: \(lonLatArray[1])")
}
//but outside here no value
return lonLatArray
}
当我调用函数时
let d:[Double] = getLongLatitudeFromAddress("1234 somewhere CA 92222")
print("\(d[0]). \(d[1])") <-- This get index out of bounce problem.
我们似乎无法在其中的闭包内分配任何值。
我以另一种方式更改了函数,但是如何从下面的函数中获取array [0]和array [1]
func getLongLatitudeFromAddress(address:String, completion: @escaping ([Double]?)->())
{
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) {
placemarks, error in
let placemark = placemarks?.first
completion([(placemark?.location?.coordinate.latitude)!,(placemark?.location?.coordinate.longitude)!])
}
}