我正在尝试使用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 */ }

强烈建议第一种选择,因为第二种选择会冻结任何其他逻辑,直到调用完成为止(但从技术上讲,它是可行的:))。

09-30 23:30