2016-12-15 4 views
1

Vielen Dank für Ihre zukünftige Hilfe! Das ist mein Array:Sortieren nach Entfernung Swift 3

var malls: [Mall] = [ 
    Mall(name:"yagey", distance:""), 
    Mall[name:"tigey", distance:"") 
] 

Wie kann ich Malls durch mall.distance sortieren?

let sortedMalls = malls.sorted { (mallOne, mallTwo) -> Bool in 
     return mallOne.distance < mallTwo.distance 
    } 

: Das ist meine Tableview ist

Tableview

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! EateriesTableViewCell 
    let mall = mallToDisplayAt(indexPath: indexPath) 
    let mallLocate = CLLocation(latitude: mall.latitude, longitude: mall.longitude) 
    print (mallLocate) 

    let distanceInMeters = mallLocate.distance(from: coords)/1000 

    let distanceInMetersString = String(format: "%.1f", distanceInMeters) 

    for index in 0..<malls.count { 
     var mall = malls[index] // copy a mall value 
     mall.distance = distanceInMetersString // change the copy of mall 
     malls[index] = mall // put the updated mall back into the array 
    } 

    cell.distanceLabel.text = distanceInMetersString + "км" 
    malls.sort() { $0.distance < $1.distance } 
    print (mall.distance) 


    return cell 
} 
+3

Warum sortieren Sie in TableViews CellForRowAt? Es wird jedes Mal ausgeführt, wenn eine Zeile sichtbar wird. Das ist nicht nötig. Und auch Sie verwiesen Mall aus Malls - vorausgesetzt, dass ist, was mallToDisplayAt tut, vor der Sortierung, die Ihnen den Wert aus dem unsortierten Array zum ersten Mal, wenn es aufgerufen wird. Schließlich wird der Abstand in string gespeichert, um einen genauen Vergleich während der Sortierung zu erhalten, müssten Sie den float/int-Wert während der Sortierung anstelle der Zeichenkette vergleichen, da der Zeichenkettenvergleich char mit char vergleicht (12 ist kleiner als 2, da das erste Zeichen ist) kleiner) –

+0

Dies ist die vierte Frage, die Sie heute zum genau gleichen Problem gestellt haben. Hör auf. Bleib bei einer Frage. Ich habe dir gesagt, was du in deiner ersten Frage tun sollst. Wenn Sie Probleme haben, es zum Laufen zu bringen, bearbeiten Sie Ihre Frage, um Ihren neuen Code am Ende anzuzeigen und das Problem anzugeben, das Sie damit haben. –

+0

Ich muss dir sagen, du scheinst über dir zu sein. Du verstehst keinen einfachen Ratschlag wie "mach die Location zu einer Immobilie". Wenn Sie immer noch die Grundlagen von Swift erlernen, werden Sie wahrscheinlich nicht in der Lage sein, etwas so Komplexes wie das Erstellen einer Tabellenansicht von Orten zu erhalten, die nach Entfernung zum Standort des Benutzers sortiert ist, bis Sie viel mehr lernen. –

Antwort

1

sortieren Zentren zuerst und dann als Datenquelle des Tableview verwenden, werden Tableview die Zellen als die Reihenfolge, in Array sortiert Zentren sortiert angezeigt werden Auch eine Einlage:

let sortedMalls = malls.sorted { $0.mallOne.distance < $1.mallTwo.distance } 

Verwenden Sie sortierteMeilen fo r:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
+0

@DuncanC, auf falscher Position kommentiert? –

+0

Yup. Das tut mir leid. Verschieben Sie es jetzt auf die Frage. –

+0

@YUNCHEN was bedeutet "sortierteMeile verwenden"? Es tut mir Leid. Es ist meine letzte Frage bevor ich das Buch lese) – dmarinkin