2016-05-10 41 views
2

嗨我正在製作一個應用程序,顯示我有趣的地方。它顯示半徑的地方。我正在使用REALM來存儲值。 但是,領域不知道如何製作唯一值。我正在使用這個獨特的行。Swift REALM - 按距離排序,過濾和存儲唯一值

let result:[String] = realm.objects(E21).sorted("name").uniqueValue("Id_prov", type: String.self) 

這尋找我

var datasourceE21Distance:Results<E21> = realm.findInRegion(E21.self, region: curentRegion).filter(tempRequest) 

周圍區域的事情,但我不知道如何把這些東西結合爲一,然後對它進行排序,從關閉一個給我的最遠處。

我會很高興在這裏得到任何幫助。

編輯我使用發現這兩個擴展:

func findInRegion<T: Object>(type: T.Type, region: MKCoordinateRegion, latitudeKey: String = "lat", longitudeKey: String = "lng") -> Results<T> { 
    // Query 
    return self 
     .objects(type) 
     .filterGeoBox(region.geoBox, latitudeKey: latitudeKey, longitudeKey: longitudeKey) 

} 

func uniqueValue<U : Equatable>(paramKey: String, type: U.Type)->[U]{ 
    var uniqueValues : [U] = [U]() 
    for obj in self { 

     if let val = obj.valueForKeyPath(paramKey) { 

      if (!uniqueValues.contains(val as! U)) { 
       uniqueValues.append(val as! U) 
      } 
     } 
    } 
    return uniqueValues 
} 

回答

1

RealmGeoQueries,您使用的是由邊界框過濾自己的實體庫,支持通過sortByDistance排序由遠處的物體。這將返回一個數組,因爲此操作必須在緩存距離的內存中完成。

您需要確保您的uniqueValue方法在Array的擴展名中定義。

0

我想出了這樣的事情。但它不能立即過濾: -/

let currentLocation = CLLocationCoordinate2D(latitude: currentLat!, longitude: currentLng!) 
      sortedObjectsByDistance = realm.findNearby(E21.self, origin: currentLocation, radius: 50000.0, sortAscending: true, latitudeKey: "lat", longitudeKey: "lng") 
      var seenIdProv:[String:Bool] = [:] 
      sortedObjectsByDistance = sortedObjectsByDistance.filter { 
       seenIdProv.updateValue(false, forKey: $0.Id_prov) ?? true 
      }