我正在尝试使用HERE api计算两个位置之间的ETA,但是我没有从ETA计算功能获得回调。甚至在完成处理程序内部也没有得到任何错误。
let routeMode = NMARoutingMode()
routeMode.transportMode = NMATransportMode.car
routeMode.routingOptions.insert(NMARoutingOption.avoidHighway)
routeMode.routingType = NMARoutingType.fastest
routeMode.resultLimit = 1
var stops = [Any]()
let startPoint = NMAGeoCoordinates(latitude: 52.562755700200796, longitude: 13.34599438123405)
let endPoint = NMAGeoCoordinates(latitude: 52.520720371976495, longitude: 13.332345457747579)
stops.append(startPoint)
stops.append(endPoint)
let coreRouter = NMACoreRouter()
coreRouter.calculateRoute(withStops: stops, routingMode: routeMode) { (routeResult, error) in
/* Not getting callback inside this block. Not even any errors in console */
}
答案 0 :(得分:0)
您的coreRouter
是在函数内本地声明的,这意味着一旦函数运行完毕,它将被解雇。异步方法完成时,您的对象已被删除。
解决方案:
在类级别声明let coreRouter = NMACoreRouter()
,仅在函数内调用方法
混乱的选择
在calculateRoute
内包装您的异步函数DispatchQueue.main.async { /* place here */ }
强烈建议第一种选择,因为第二种选择会冻结任何其他逻辑,直到调用完成为止(但从技术上讲,它是可行的:))。