Je peux afficher la liste des emplacements sur une table. Mais maintenant je veux trier en fonction de l'emplacement actuel.Afficher une liste des emplacements les plus proches de l'utilisateur sur une table
Voilà comment j'afficher mes emplacements:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "locationCell", for: indexPath)
let location = LocationManager.shared.locations[indexPath.row]
cell.textLabel?.text = location.name
return cell
}
J'ai essayé de mettre en œuvre cette distance dans ma classe Location
que je suis arrivé de https://stackoverflow.com/a/35200027/6362735 mais je ne sais pas ce que je dois faire ensuite et comment Trier.
Voici ma classe Lieu:
class Location {
var name: String
var latitude: Double
var longitude: Double
var location:CLLocation {
return CLLocation(latitude: latitude, longitude: longitude)
}
init?(json: JSON) {
guard let name = json["name"] as? String, let latitude = json["latitude"] as? Double, let longitude = json["longitude"] as? Double else { return nil }
self.name = name
self.latitude = latitude
self.longitude = longitude
}
func distance(to location: CLLocation) -> CLLocationDistance {
return location.distance(from: self.location)
}
}
Affichage de l'emplacement actuel:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
mapView.setRegion(region, animated: true)
self.mapView.showsUserLocation = true
}
Merci pour votre réponse. Mais pourriez-vous élaborer là où je l'appellerais sur mon application? – mninety5
Cela dépend de la structure de votre application.Si vous avez un bouton ou quelque chose qui déclenche l'action de filtrage, vous devriez le mettre là. Si vous voulez que vos emplacements soient toujours triés par distance, vous pouvez le placer dans le contrôleur de TableView dans 'viewDidLoad' par exemple. Je vais mettre à jour la réponse dans les deux cas. – jvrmed
Qu'est-ce que je mets dans les paramètres cependant? Quand j'utilise votre fonction de tri, il dit simplement: 'argument manquant pour le paramètre 'to' in call'. Il attend un 'CLLocation'. – mninety5