Swift REALM - 按距离排序,过滤并仅存储唯一值

时间:2016-05-10 09:13:50

标签: swift realm

嗨,我正在制作一个向我展示有趣地方的应用。它显示在半径范围内。我正在使用REALM存储值。 但是,领域不知道如何制作唯一值。我将它用于Unique行。

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
}

2 个答案:

答案 0 :(得分:1)

RealmGeoQueries,您用于通过边界框过滤实体的库,支持通过sortByDistance按距离排序对象。这将返回一个数组,因为此操作必须在内存中以缓存的距离完成。

您需要确保在uniqueValue的扩展程序中定义了Array方法。

答案 1 :(得分:0)

我想出了类似的东西。但它不能马上过滤: - /

compile 'me.aflak.libraries:ezcam:1.0'