Ich versuche, die Beiträge nach der Entfernung von der Post an den aktuellen Benutzer zu sortieren. My Firebase-Datenbank sieht wie folgt aus:Swift Firebase Sortieren nach Entfernung von Beitrag
POST:
USER:
Ich habe bereits erreichen, um meine Beiträge durch die Zahlung zu sortieren mit diesem Code
var REF_REQUESTS = Database.database().reference().child("requests")
func observeBestPaidRequests(completion: @escaping (Request) -> Void)
{
REF_REQUESTS.queryOrdered(byChild: "pay").observeSingleEvent(of: .value, with:
{
(snapshot) in
let arraySnapshot = (snapshot.children.allObjects as! [DataSnapshot]).reversed()
arraySnapshot.forEach(
{
(child) in
if let dict = child.value as? [String: Any]
{
let request = Request.transformRequest(dict: dict, key: snapshot.key)
completion(request)
}
})
})
}
Aber jetzt weiß ich nicht und habe seit etwa 1 Woche daran gekämpft, wie man es mit Hilfe der Benutzer und der Position der Post nach der Entfernung sortiert.
Irgendwelche Ideen? Ich würde wirklich eine Antwort zu schätzen wissen!
EDIT:
-Code aus dem Viewcontroller, wo ich versuche, es auf das Array anhängen und laden Sie die Tableview:
@objc func loadBestPaidRequests()
{
self.requests.removeAll()
Api.requestApi.observeBestPaidRequests
{
(request) in
guard let requesterId = request.uid
else
{
return
}
self.fetchUser(uid: requesterId, completed:
{
let requestLocation = CLLocation(latitude: request.latitude!, longitude: request.longitude!)
let distanceInMeters = requestLocation.distance(from: self.mapView.userLocation.location!)
let distanceInMetersUserFriendly = Double(round(1000*distanceInMeters/1000))
self.requests.append(request)
self.tableView.reloadData()
})
}
}
Unter der Annahme, dass der Benutzer die Anfragen Knoten beobachtet, dann ist jedes Mal eine neue Anforderung, dass Daten wird dem Benutzer zur Verfügung gestellt. Eine Lösung wäre, den Abstand zwischen Benutzerkoordinaten und den eingehenden Koordinaten aus der Anfrage zu berechnen (Haversine?). Fügen Sie diese Entfernung zu einer tableView dataSource hinzu, sortieren Sie sie aufsteigend nach Entfernung und laden Sie die tableView neu. Das würde dann die Person, die die Anfrage gemacht hat, und die Entfernung vom Benutzer nach Entfernung anzeigen. – Jay
Danke für die Antwort, aber wie genau sortiere ich es aufsteigend nach Entfernung? – Noah
Bei einem Array: myArray = [4, 2, 3, 1] können Sie die Swift-Array-Sortiermethode verwenden: sortedArray = array.sorted {$ 0 <$ 1}. Alles, was Sie tun müssen, ist, die aktuellen Benutzerkoordinaten x0, y0 und die eingehenden Anforderungskoordinaten x1, y1 zu nehmen, die Entfernung zu berechnen und die Ergebnisse dem Array hinzuzufügen. Dann sortiere das Array und lade die tableView neu. – Jay