2016-07-08 6 views
0

Я создаю представление с видом карты и таблицей, надеюсь, что я могу сортировать ячейку на расстоянии от местоположения пользователя, я пытаюсь использовать метод distanceFromLoaction, но это показывает, что CLLocationCoordinate не имеет члена distanceFromLocaiton, есть ли другой способ сделать это или исправить?tableview сортировать по расстоянию swift

это моя структура массива

import UIKit 
import MapKit 

class tripSpot: NSObject, MKAnnotation{ 
var title: String? 
var coordinate: CLLocationCoordinate2D 
var regionRadius: Double 
var location: String? 
var type: String? 


init(title:String , coordinate: CLLocationCoordinate2D , regionRadius: Double, location: String, type: String){ 
    self.title = title 
    self.coordinate = coordinate 
    self.regionRadius = regionRadius 
    self.location = location 
    self.type = type 
    } 

    } 

и мой tableviewcode

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("MapCell") as! mapTableViewCell 

    self.tripspot.sort({ $0.coordinate.distanceFromLoaction(self.coordinate) < $1.coordinate.distanceInKilometersTo(self.coordinate)}) 
    if searchController.active{ 
    cell.title.text = searchResults[indexPath.row].title 
    cell.location.text = searchResults[indexPath.row].location 
    return cell 
    }else{ 
    cell.title.text = tripspot[indexPath.row].title 
    cell.location.text = tripspot[indexPath.row].location 
    return cell 
    } 

спасибо за любые советы.

+1

'distanceFromLocation()' 'является CLLocation' метод не' CLLocationCoordinate2D' один. Таким образом, вы должны преобразовать объект CLLocationCoordinate2D в 'CLLocation' (довольно просто), а затем называть' distanceFromLocation() 'на нем. – Larme

+0

Привет @ Larme вы можете научить меня, как превратить CLLocationCoordinate2d в CLLocation в быстром? У меня есть поиск по всему стеку, но все равно можно получить его. что вы. –

+0

'var clLocationObject = CLLocation (широта: cllocationCoordinate2D.latitude, longitude: cllocationCoordinate2D.longitude)' или что-то подобное. – Larme

ответ

6
import UIKit 
import CoreLocation 

final class Places { 
var title: String? 
var cllocation: CLLocation 
var regionRadius: Double 
var location: String? 
var type: String? 
var distance : Double? 
var coordinate : CLLocationCoordinate2D 

init(title:String , cllocation: CLLocation , regionRadius: Double, location: String, type: String ,distance:Double!,coordinate: CLLocationCoordinate2D){ 
    self.title = title 
    self.cllocation = cllocation 
    self.coordinate = coordinate 
    self.regionRadius = regionRadius 
    self.location = location 
    self.type = type 
    self.distance = distance 
} 


// Function to calculate the distance from given location. 
func calculateDistance(fromLocation: CLLocation?) { 

    distance = cllocation.distanceFromLocation(fromLocation!) 
} 
} 


let fromLocation:CLLocation = CLLocation(latitude: 24.186965, longitude: 120.633268) 

var places:[Places] = [ 


Places(title: "Title1", cllocation: CLLocation(latitude :24.181143, longitude: 120.593158), regionRadius: 300.0, location: "LocationTitle1", type: "Food",distance : CLLocation(latitude :24.181143, longitude: 120.593158).distanceFromLocation(fromLocation),coordinate : CLLocationCoordinate2DMake(24.181143,120.593158)), 
Places(title: "Title2", cllocation: CLLocation(latitude:24.14289,longitude:120.679901), regionRadius:150.0, location:"LocationTitle2",type: "Food",distance : CLLocation(latitude:24.14289,longitude:120.679901).distanceFromLocation(fromLocation),coordinate : CLLocationCoordinate2DMake(24.14289,120.679901)), 
Places(title: "Title3", cllocation: CLLocation(latitude : 24.180407, longitude:120.645086), regionRadius: 300.0, location:"LocationTitle3", type: "Food",distance : CLLocation(latitude : 24.180407, longitude:120.645086).distanceFromLocation(fromLocation),coordinate : CLLocationCoordinate2DMake(24.180407,120.645086)), 
Places(title: "Title4", cllocation: CLLocation(latitude: 24.149062,longitude:120.684891), regionRadius: 300.0, location: "LocationTitle4", type: "Food",distance : CLLocation(latitude: 24.149062,longitude:120.684891).distanceFromLocation(fromLocation),coordinate : CLLocationCoordinate2DMake(24.149062,120.684891)), 
Places(title: "Title5", cllocation: CLLocation(latitude:24.138598,longitude:120.672096), regionRadius:150.0, location:"LocationTitle5",type: "Food",distance : CLLocation(latitude:24.138598,longitude:120.672096).distanceFromLocation(fromLocation),coordinate : CLLocationCoordinate2DMake(24.138598,120.672096)), 
Places(title: "Title6", cllocation: CLLocation(latitude :24.1333434,longitude:120.680744), regionRadius:100.0, location:"LocationtTitle6",type: "Culture",distance : CLLocation(latitude :24.1333434,longitude:120.680744).distanceFromLocation(fromLocation),coordinate : CLLocationCoordinate2DMake(24.1333434,120.680744)) 

] 

for k in 0...(places.count-1) { 
     print("\(places[k].distance)") 
} 
for place in places { 
     place.calculateDistance(fromLocation) // Replace YOUR_LOCATION   with the location you want to calculate the distance to. 
} 


    places.sortInPlace({ $0.distance < $1.distance }) 

    for n in 0...(places.count-1) { 
    print("\(places[n].distance)") 
    } 

Выход:

//before sort array 
Optional(4126.1395817058) 
Optional(6803.61030342841) 
Optional(1403.39181021788) 
Optional(6718.92222011204) 
Optional(6653.47447563344) 
Optional(7651.92757760459) 


//after sort array 
Optional(1403.39181021788) 
Optional(4126.1395817058) 
Optional(6653.47447563344) 
Optional(6718.92222011204) 
Optional(6803.61030342841) 
Optional(7651.92757760459) 
+0

Я использую ваш метод, но все еще не могу выполнить, можно ли быть более конкретным? Спасибо. –

+0

Вы не сможете сравнить расстояние? –

+0

Я понятия не имею, как получить расстояние от двух CLLocationCooridinate2D –