2016-03-28 43 views
-1

Bu yüzden hücreleri hesaplanan mesafeye göre sıralamaya çalışıyorum. Bir yapı sahnedeHücreleri uzaklığa göre ayırma

struct Sal { 
var name:String 
var coordinatesLat: CLLocationDegrees 
var coordinatesLong: CLLocationDegrees 
//var distance? 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! SalCustomCell 

    let name = sals[indexPath.row].name 
    cell.name.text = name 

    // Calculate distance between current location and sal 
    let salLocation = CLLocation(latitude: sals[indexPath.row].coordinatesLat, longitude: sals[indexPath.row].coordinatesLong) 

    // Display distance in cell. 
    let distanceM = viewController.distanceFromLocation(salLocation) 
    let distanceKm = round(distanceM/1000) 
    cell.distance.text = String(distanceKm) + "km" 
    return cell 
} 

ben değilim sahne B'de Km içinde mesafeyi görüntülemek için sahne A'dan işlevleri çağırmak A

func distanceFromLocation(location: CLLocation) -> CLLocationDistance { 

    // Find lat and long coordinates of current location 
    let getLat = self.location.latitude 
    let getLon = self.location.longitude 
    let currentLocation = CLLocation(latitude: getLat, longitude: getLon) 
    // Calculate distance from current location to sal 
    let distance = currentLocation.distanceFromLocation(location) 
    return distance 
} 

sahne B var onları hücrede görüntülenen mesafelere göre sıralamaya çalışıyorum ama onları nasıl sıralayacağımı emin değilim. o adı olsaydı ben sadece

sals.sortInPlace ({ $0.name < $1.name }) 

yapabilirdi ama ayrı yapının değil çünkü

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

yapamaz. Yapıdan ayrı tutmalı mıyım? Öyleyse nasıl?

Ben de o tarafa

var distance = [Double]() 
self.distance.append(distanceKm) // inside cellForRowAtIndexPath 
distance.sortInPlace ({ $0 < $1 }) 

sıralamak için boş bir dizi oluşturmak ve diziye mesafe eklemek için çalıştı Ama bu mesafe hesaplama içermeyecek şekilde bu

+0

_cells_ öğesini sıralamıyorsunuz. _model data_ öğesini sıralarsınız ve tablo görünümünü yeniden yüklersiniz. 'cellForRowAtIndexPath', bu sıralamayı yapacak yer olan _not_; Önceden model verisinde yapılmalıdır. – matt

+0

Dolayısıyla, bir şekilde, yapıya bir şekilde bir mesafe eklemem ve onu oluşturduğum dizimden ayırmam gerekiyor, değil mi? Bu mantıklıysa – luke

+0

Ne sals'ın ne olduğunu açıklamıyorsunuz ama bunun bir dizi Sal olduğunu varsayalım. Öyleyse evet, bu diziyi sıralarsınız. Ama bunu cellForRow'da yapmazdınız. – matt

cevap

1

Yeniden Yazma Sal iş vermedi Bu gibi işlev:

struct Sal { 
    var name:String 
    var coordinatesLat: CLLocationDegrees 
    var coordinatesLong: CLLocationDegrees 
    func distanceFromLocation(location: CLLocation) -> CLLocationDistance { 
     // ... 
    } 
} 

Artık Sal diziniz, sıralayabileceğiniz bir Sal özelliğine sahiptir.

+0

Bunu uygulamaya çalışıyorum ama mesafeyi – luke

+0

mesafesine göre sıralayabilmek için bunu nasıl yapacağımdan eminim ne "mesafeyle" ne anlama geldiğini bilmiyorum. _what_ mesafesine göre? – matt

+0

Farz edelim ki bazı ortak konumdan 'loc '. Daha sonra, 'sals.sortInPlace {$ 0.distanceFromLocation (loc) <$ 1.distanceFromLocation (loc)}' – matt

İlgili konular