#ios #swift #mapkit #directions
#iOS #swift #mapkit #указания
Вопрос:
Я пытаюсь предоставить пользователю ETA для ходьбы, если прогулка занимает менее 15 минут, и для вождения в других случаях. Я бы хотел сделать это в одном MKDirections.Request()
, чтобы мне не приходилось рекурсивно вызывать одну и ту же функцию в ее обработчике завершения.
Я могу передать массив для request.transportType, но я не могу получить оба значения обратно, хотя я вижу их в отладчике.
func requestDirections(coordinates:CLLocationCoordinate2D, transitType:MKDirectionsTransportType, completion:@escaping(_ travelTime:Double, _ transportType:String)-> Void){
var travelTime:Double = -1.0
let directionRequest = MKDirections.Request()
directionRequest.source = MKMapItem.forCurrentLocation()
directionRequest.destination = MKMapItem(placemark: MKPlacemark(coordinate: coordinates))
directionRequest.transportType = [.automobile, .walking]
let directions = MKDirections(request: directionRequest)
directions.calculateETA(){(ETA,error) in
if(error == nil){
if(ETA.sortedETAs[0]>15){
completion(travelTime,"car")
}else{
completion(travelTime,"figure.walk")
}
}else{
completion(travelTime, "none")
}
}
}
Возможно ли сделать то, что я пытаюсь?
Из отладчика, если я щелкну правой кнопкой мыши и напечатаю описание отсортированных ETA в возврате ETA:
Printing description of ETA.some._sortedETAs:
<__NSArrayM 0x6040003b4dd0>(
<GEOETAResultByType: 0x60b0000a4d80> {
distance = 14530;
historicTravelTime = 786;
"static_travel_time" = 725;
status = "STATUS_SUCCESS";
transportType = AUTOMOBILE;
travelTimeBestEstimate = 784;
},
<GEOETAResultByType: 0x60b0000a4cd0> {
distance = 13111;
historicTravelTime = 10362;
"static_travel_time" = 10362;
status = "STATUS_SUCCESS";
transportType = WALKING;
travelTimeBestEstimate = 10362;
}