【发布时间】:2017-10-28 18:10:58
【问题描述】:
我有一个闭包计算两点之间的距离和时间,但我需要提取闭包之外的值数组(方向和旅程时间)。
我很确定完成处理程序是可行的方法,但不太确定如何实现它。
我的代码:
var completionHandlers: [() -> Void] = []
@IBAction func calculateItinerary(_ sender: Any) {
// start calc
for index in 0...coordsOfCollective.count - 2 {
let sourceLocation = MKPlacemark(coordinate: coordsOfCollective[index])
let destinationLocation = MKPlacemark(coordinate: coordsOfCollective[index + 1])
let sourceMapItem = MKMapItem(placemark: sourceLocation)
let destinationMapItem = MKMapItem(placemark: destinationLocation)
let request = MKDirectionsRequest()
request.source = sourceMapItem
request.destination = destinationMapItem
request.transportType = .automobile
request.requestsAlternateRoutes = false
let directions = MKDirections(request: request)
directions.calculate { response, error in
if let route = response?.routes.first {
print("Distance: \(route.distance/1000) km, ETA: \(route.expectedTravelTime/60) mins")
self.distances.append(route.distance/1000)
self.journeyTimes.append(route.expectedTravelTime/60)
print(self.distances)
print(self.journeyTimes)
completionHandlers.append(?????)
} else {
print("Error!")
}
}
}
print(completionHandlers)
}
directions.calculate 有一个 calculate(completionHandler: @escaping MKDirectionsHandler) 声明,所以我可以看到它是一个转义闭包。但我不知道如何在其中提取距离和旅程时间数组。打印函数当前产生值,但无法从其他地方访问。
感谢任何帮助。谢谢。
【问题讨论】: