Я пытаюсь вычислить ETA между двумя координатами в Swift, используя calculateETAWithCompletionHandler из класса MKDirections. У меня есть следующий код в моей программе,MKDirections calculateETAWithCompletionHandler выполняется с задержкой Swift 2.0
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' распечатаны ПОСЛЕ мы вернулись из расчетаETAofClosestBus().
Я уверен, что не понимаю, как вычисляется функцияETAWithCompletionHandler, но я бы хотел рассчитать ETA между двумя аннотациями через автомобиль, и если есть более интуитивный способ выполнить это или кто-то может помочь мне понять Обработчик лучше, это было бы очень признательно.
Решение:
iOS - Swift - Function that returns asynchronously retrieved value помог мне понять, как это сделать лучше всего.
Благодарим Вас за направление. – Ivan
без проблем :) .... –