Custom array using to sort the Array based on the Distance

1. Create Swift file and paste it the below code

import Foundation
import CoreLocation


final public class Places : NSObject  {
    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 (current Location).

    func calculateDistance(fromLocation: CLLocation?) {
        distance = cllocation.distanceFromLocation(fromLocation!)
    }// calculate the distance based on the current location
}

2. In viewcontroller can you import the “coreLocation framework”

import CoreLocation
class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
 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))
            
        ]

        //Before sort the array
        for k in 0...(places.count-1) {
            print("\(places[k].distance)")
        }
        
//sort the array based on the current location to calculate the distance to compare the each and every array objects to sort the values
        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 }) 
         //after sort the array
        for n in 0...(places.count-1) {
            print("\(places[n].distance)")
        }
        
        
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

OutPut: 
//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)
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s