我正在尝试使用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 */
}
最佳答案
您的coreRouter
在函数内本地声明,这意味着函数完成运行后将立即被解雇。异步方法完成时,您的对象已被删除。
解决方案:
在类级别声明let coreRouter = NMACoreRouter()
,仅在函数内调用方法
混乱的替代
将您的异步函数calculateRoute
调用包装在DispatchQueue.main.async { /* place here */ }
中
强烈建议第一种选择,因为第二种选择会冻结任何其他逻辑,直到调用完成为止(但从技术上讲,它是可行的:))。