Cry*_*tal 2 core-location ios swift
我想用其他逻辑将geocoder.geocdeAddressString包装在另一个方法中.
public func placemarkForSearchResult<T>(searchResult: T) -> CLPlacemark? {
if let searchResult = searchResult as? String {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(searchResult, completionHandler: {
(placemarks, error) -> Void in
// Check for returned placemarks
if let placemarks = placemarks where placemarks.count > 0 {
return placemarks[0] as! CLPlacemark // CLPlacemark is not convertible to void error message
}
return nil // Typd Void does not conform to protocol NilLiteralConvertible
})
}
}
Run Code Online (Sandbox Code Playgroud)
我在这个方法中有一些其他逻辑并不是真的相关,但我想知道如何处理这样的情况,我想返回一个CLPlacemark,但不能,因为地理编码器的completionHandler返回Void.我无法更改地理编码器回调的Void参数.那可能吗?或者我是否一直在调用使用地理编码器中找到的CLPlacemark的委托方法?提前致谢.
您永远不能从placemarkForSearchResult函数返回地标,因为获取地标需要使用异步函数(geocodeAddressString).到那个时候该功能已经完成并回调到你的完成处理程序,你placemarkForSearchResult已经完成并很久以前就回来了!
您需要一个与您正在调用的函数的异步特性兼容的策略.相反,从返回标的placemarkForSearchResult,则需要placemarkForSearchResult到接受一个回调函数参数.当您在完成处理程序中有地标时,您将调用该回调函数.如果该回调函数(巧妙地)设计为接受地标参数,那么您现在将该地标交给任何一个打电话给您的人.
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |