NSPredicate
実際には、レルム フィルター APIを使用してこれを行う非常に簡単な方法があります。
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 ではすべてのクエリ (クエリとプロパティ アクセスを含む) は遅延です。データは、プロパティがアクセスされたときにのみ読み取られます。