我正在尝试列出用户可以添加到活动中的联系人,但我想过滤结果,因此重复项不会显示。因此,如果我添加John Doe,他的联系人将不会显示在联系人列表中。我不是很熟悉NSPredicate所以我不确定这是最好的方法还是将Results数组转换为更容易使用的东西。
答案 0 :(得分:0)
这是关于kotlin的例子,但非常接近swift。 你可以做那样的事情。您可以获取按名称过滤的用户列表,而不是获取RealmResults。
fun filteredUsers(){
val realm = Realm.getDefaultInstance()
realm.where(UserRealm::class.java)
.findAllAsync()
.asObservable()
.filter { users -> users.isLoaded }
.flatMap { users -> Observable.from(users) }
.filter { user -> !user.name.equals("John Doe") }
.observeOn(AndroidSchedulers.mainThread())
.doOnError { err -> err.printStackTrace() }
.toList()
.subscribe { userList -> print(userList) }
}
而且我在docs中找到了更简单的快捷方式:
// Query using a predicate string
var tanDogs = realm.objects(Dog).filter("color = 'tan' AND name BEGINSWITH 'B'")
// Query using an NSPredicate
let predicate = NSPredicate(format: "color = %@ AND name BEGINSWITH %@", "tan", "B")
tanDogs = realm.objects(Dog).filter(predicate)
答案 1 :(得分:0)
您需要一个独特的查询,但Realm doesn't support them natively yet。
然而,您可以从Realm获取数据并自行执行重复数据删除,但随后您将失去Realm的自动更新Results
类型:
let realm = try! Realm()
let currentUser = realm.objects(User).filter("me == true").first!
let uniqueContactNames = Set(currentUser.contacts.valueForKey("name") as! [String])
有关详细信息和建议的解决方法,请参阅#1103。