MKDirections calculateETAWithCompletionHandler 执行延迟 Swift 2.0

MKDirections calculateETAWithCompletionHandler executing with delay Swift 2.0

我正在尝试使用 MKDirections class 中的 calculateETAWithCompletionHandler 计算 Swift 中两个坐标之间的 ETA。我的程序中有以下代码,

MapViewController.swift

print("A")
calculateETAofClosestBus(closestBusStop)
print("B")

func calculateETAofClosestBus(destination: BusStop) {
    var shortestETA = 0

    print("C")
    var request = MKDirectionsRequest()
    var sourceItem = MKMapItem(placemark: MKPlacemark(coordinate: listBuses[0].pin.coordinate, addressDictionary: nil))
    request.source = sourceItem
    request.transportType = .Automobile
    let destinationCoordinates = CLLocationCoordinate2D(latitude: destination.coordinate.latitude, longitude: destination.coordinate.longitude)
    let destinationItem = MKMapItem(placemark: MKPlacemark(coordinate: destinationCoordinates, addressDictionary: nil))
    request.destination = destinationItem
    request.requestsAlternateRoutes = false
    var directions = MKDirections(request: request)
    print("D")
    directions.calculateETAWithCompletionHandler { (etaResponse, error) -> Void in
        print("E")
        if let error = error {
            print("Error while requesting ETA : \(error.localizedDescription)")
        } else {
            print("F")
            shortestETA = Int((etaResponse?.expectedTravelTime)!)
        }
    }
    print("G")
}

我包含了打印语句来显示代码的执行。当我 运行 程序时,我得到的输出是

A
C
D
G
B
E
F

所以,我注意到 calculateETAofClosestBus() 函数完成执行(到达 G,然后到达 B),但随后 directions.calculateETAWithCompletionHandler 执行,所以 'E' 和 'F' 在我们从 calculateETAofClosestBus() 返回后 被打印出来。

我确定我不明白 calculateETAWithCompletionHandler 是如何工作的,但我想通过汽车计算两个注释之间的 ETA,如果有更直观的方法来完成这个或者有人可以帮助我理解处理程序更好,将不胜感激。

解法:

帮助我了解了如何做到最好。

请看这个 Link 它清楚地说明 calculateETAWithCompletionHandler 异步工作 .Since asynchronous, it works on different thread.But 你的主线程以自己的方式执行并打印 G

Begins calculating the requested travel-time information asynchronously.

如果你想在异步方法中return..你可以使用closure.Here是link