swift - MKDirections calculateWithCompletionHandler

标签 swift swift3 mkdirection

我正在尝试在函数内部发出 MKDirections 请求,然后返回该值。

这是我目前的情况

func requestETA(userCLLocation: CLLocation, coordinate: CLLocationCoordinate2D) -> String {
    let request = MKDirectionsRequest()

    // code setting up directions request, not important or relevant

    let directions = MKDirections(request: request)

    var travelTime = "Not Available"

        directions.calculate { response, error in
            if let route = response?.routes.first {
                travelTime = "\(route.expectedTravelTime/60)"
                print(travelTime)
            } else {
                travelTime = "0"
            }
        }
    print(travelTime)
    return travelTime
}

我知道 MKDirections 是异步运行的,因此目前它会在路线请求完成之前返回。 我如何让返回语句等待某种完成处理程序?

还知道这个问题在这里得到了相当模糊的回答 stackoverflow以一种非常笼统的方式。我一直无法弄清楚如何将该答案应用于这个特定问题。

最佳答案

您可以添加一个完成处理程序来传递一个可选字符串和一个错误,如下所示:

func requestETA(userCLLocation: CLLocation, coordinate: CLLocationCoordinate2D, completion: @escaping (_ string: String?, _ error: Error?) -> () ) {
    let request = MKDirectionsRequest()
    // code setting up directions request
    let directions = MKDirections(request: request)
    var travelTime: String?
    directions.calculate { response, error in
        if let route = response?.routes.first {
            travelTime = String(route.expectedTravelTime/60)
        }
        completion(travelTime, error)
    }
}

用法

requestETA(userCLLocation: location, coordinate: coordinate) { (travelTime, error) in
    guard let travelTime = travelTime, error == nil else { return }
    print(travelTime)
}

关于swift - MKDirections calculateWithCompletionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44533592/

相关文章:

ios - 更新现有的 'Contacts' 电话号码?

ios - 使用segmentcontroller改变tableview

swift - 从一个 View Controller 获取 Facebook 值(电子邮件、姓名等)并将它们传输到另一个 View Controller

ios - 具有 Swift 4 依赖项的 Swift 3 Cocoapod

swift - MapKit - MKDirectionsRequest() 的传输类型不工作

ios - MKDirections : Directions Not Available

ios - 如何在加载 webview 之前同时获取设备 ID 和设备 token ?

uitableview - Swift:无法在自定义 UITableViewCell 中访问 IBOutlet

sprite-kit - Sprite Kit 不再使用 iOS10 播放声音