我想知道在realm.io(swift)中是否有可能从一个“表”中选择不在另一个“表”中的所有项目。
假设您有两个班级:
class A: Object {
dynamic var id: Int = 0
dynamic var text: String = ""
}
class B: Object {
dynamic var id: Int = 0
dynamic var value: Bool = false
}
是否有可能从A中获得B中不存在ID的项目的结果?
答案 0 :(得分:3)
在Realm过滤器API上使用NSPredicate
实际上有一种非常简单的方法。
func fetch() throws -> [A] {
do {
// Create Realm
let realm = try Realm()
// Get B objects from Realm and put their IDs to [Int] array
let IdB: [Int] = realm.objects(B).map { $0.id }
// Create predicate
// Filter all items where property id is not present in array IdB
let predicateFilter = NSPredicate(format: "NOT (id IN %@)", IdB)
// Get all A objects from array using predicateFilter
let objectsA = realm.objects(A).filter(predicateFilter)
// Return the [A] array
return objectsA.map { $0 }
} catch {
// Throw an error if any
throw error
}
}
另请注意,使用Realm获取的所有对象都是延迟加载的,这意味着此方法也非常快。来自文档:
所有查询(包括查询和属性访问)在Realm中都是惰性的。只有在访问属性时才会读取数据。