我想计算我当前位置和CLLocation
s列表之间的实际步行距离MKDirections.calculate
。但是,由于某种原因,函数末尾的 return 命令不等待结果,而是尝试返回空变量。我的代码如下所示:
func getDistance (location1: CLLocation, location2: CLLocation) {
let coordinates1 = location1.coordinate
let placemark1 = MKPlacemark(coordinate: coordinates1)
let sourceItem = MKMapItem(placemark: placemark1)
let coordinates2 = location2.coordinate
let placemark2 = MKPlacemark(coordinate: coordinates2)
let destinationItem = MKMapItem(placemark: placemark2)
let request = MKDirectionsRequest()
request.source = sourceItem
request.destination = destinationItem
request.requestsAlternateRoutes = true
request.transportType = .walking
var distance: Double?
let directions = MKDirections(request: request)
directions.calculate { (response, error) in
if var routeResponse = response?.routes {
routeResponse.sort(by: {$0.expectedTravelTime < $1.expectedTravelTime})
let quickestRoute: MKRoute = routeResponse[0]
distance = Double(quickestRoute.distance)
}
}
return distance //returns nil
}
之后,我想在这样的代码中使用该函数:
let myLocation = CLLocation(latitude: 47.0, longitude: 17.0)
let destinationArray = [CLLocation(latitude: 47.1, longitude: 17.1), CLLocation(latitude: 47.2, longitude: 17.2), CLLocation(latitude: 47.3, longitude: 17.3)]
var distanceArray: [Double] = []
for destination in destinationArray {
distanceArray.append(getDistance(location1: myLocation, location2: destination))
}
return distanceArray
我尝试过闭包,但它们不起作用,因为我找不到返回 distanceArray 的方法(同样的错误,它没有等待闭包运行并返回空数组)。我也尝试过 DispatchGroups 但它们没有效果(也许我以错误的方式实现它们)。
我将衷心感谢您的帮助。
谢谢你。