地理编码函数返回void,需要它返回CLLocationCoordinate2D

时间:2016-06-30 21:28:31

标签: ios mapkit yelp

我正在使用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
    }
})

}

1 个答案:

答案 0 :(得分:1)

地理编码是异步的。这意味着您进行函数调用,在结果可用之前立即返回。因此,您可以根据函数返回坐标。

相反,您需要编写函数来获取完成块并编写完成块以将坐标作为参数。然后调用forwardGeocoding函数并在地理编码完成后传入要执行的代码。

在这个主题上查看我的答案:How to wait for a function to end on iOS/Swift, before starting the second one

用于处理您正在处理的确切情况的示例项目。