Encuentra la longitud y la latitud más cercanas en la matriz desde la location del usuario – iOS Swift

En la pregunta publicada aquí , el usuario preguntó:

Tengo una matriz llena de longitudes y latitudes. Tengo dos variables dobles con la location de mis usuarios. Me gustaría probar la distancia entre las ubicaciones de mi usuario contra mi matriz para ver qué location es la más cercana. ¿Cómo hago esto?

Esto obtendrá la distancia entre la location 2, pero el equipaje para entender cómo lo pondría a testing en una variedad de ubicaciones.

En respuesta, obtuvo el siguiente código:

NSArray *locations = //your array of CLLocation objects CLLocation *currentLocation = //current device Location CLLocation *closestLocation; CLLocationDistance smallestDistance = DBL_MAX; // set the max value for (CLLocation *location in locations) { CLLocationDistance distance = [currentLocation distanceFromLocation:location]; if (distance < smallestDistance) { smallestDistance = distance; closestLocation = location; } } NSLog(@"smallestDistance = %f", smallestDistance); 

Tengo exactamente el mismo problema en una aplicación en la que estoy trabajando, y creo que esta pieza de código podría funcionar perfectamente. Sin embargo, estoy usando Swift, y este código está en Objective-C.

Mi única pregunta es: ¿cómo debería verse en Swift?

Gracias por cualquier ayuda. Soy nuevo en todo esto, y ver esta pieza de código en Swift podría ser una gran ventaja.

 var closestLocation: CLLocation? var smallestDistance: CLLocationDistance? for location in locations { let distance = currentLocation.distanceFromLocation(location) if smallestDistance == nil || distance < smallestDistance { closestLocation = location smallestDistance = distance } } print("smallestDistance = \(smallestDistance)") 

o como una function:

 func locationInLocations(locations: [CLLocation], closestToLocation location: CLLocation) -> CLLocation? { if locations.count == 0 { return nil } var closestLocation: CLLocation? var smallestDistance: CLLocationDistance? for location in locations { let distance = location.distanceFromLocation(location) if smallestDistance == nil || distance < smallestDistance { closestLocation = location smallestDistance = distance } } print("closestLocation: \(closestLocation), distance: \(smallestDistance)") return closestLocation } 

Para Swift 3 he creado este pequeño trozo de código "funcional":

 let coord1 = CLLocation(latitude: 52.12345, longitude: 13.54321) let coord2 = CLLocation(latitude: 52.45678, longitude: 13.98765) let coord3 = CLLocation(latitude: 53.45678, longitude: 13.54455) let coordinates = [coord1, coord2, coord3] let userLocation = CLLocation(latitude: 52.23678, longitude: 13.55555) let closest = coordinates.min(by: { $0.distance(from: userLocation) < $1.distance(from: userLocation) })