我正在使用MapKit的前向地理编码功能,并创建了一个函数,该函数将从Yelp API中获取地址,并将其转发地理编码。但是,如果我将Void更改为CLLocationCoordinate2D,此函数本身就会返回void并且不会正常运行。我所需要的只是让它返回"坐标。"
func forwardGeocoding(address: String) {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address, completionHandler: {(placemarks, error) -> Void in
if((error) != nil){
print("Error", error)
}
if let placemark = placemarks?.first {
let coordinate:CLLocationCoordinate2D = placemark.location!.coordinate
}
})
}
答案 0 :(得分:1)
地理编码是异步的。这意味着您进行函数调用,在结果可用之前立即返回。因此,您可以根据函数返回坐标。
相反,您需要编写函数来获取完成块并编写完成块以将坐标作为参数。然后调用forwardGeocoding函数并在地理编码完成后传入要执行的代码。
在这个主题上查看我的答案:How to wait for a function to end on iOS/Swift, before starting the second one
用于处理您正在处理的确切情况的示例项目。