Swift diff realm.io无需提前获取它

时间:2016-06-06 12:31:37

标签: swift realm realm-cocoa

我想知道在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的项目的结果?

1 个答案:

答案 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中都是惰性的。只有在访问属性时才会读取数据。