【问题标题】:MKDirections calculateETAWithCompletionHandler executing with delay Swift 2.0MKDirections calculateETAWithCompletionHandler 延迟执行 Swift 2.0
【发布时间】:2016-01-29 03:33:27
【问题描述】:

我正在尝试使用 MKDirections 类中的 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”AFTER 我们从 calculateETAofClosestBus() 返回。

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

解决方案:

iOS - Swift - Function that returns asynchronously retrieved value 帮助我了解了如何最好地完成这项工作。

【问题讨论】:

    标签: swift asynchronous closures mkmapview mapkit


    【解决方案1】:

    请看一下这个Link 它清楚地表明calculateETAWithCompletionHandler 异步工作 .由于异步,它在不同的线程上工作。但是你的主线程正在以自己的方式执行并打印 G

    开始计算请求的行程时间信息 异步。

    如果你想在异步方法中返回..你可以使用闭包。这里是link

    【讨论】:

    • 感谢您的指导。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2018-02-25
    • 2011-09-23
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多