Этот вопрос
Есть ли способ запросить базу данных Realm для всех детей, которые не принадлежат к одному из родителей?
Конечно! Очень просто с одной строкой кода.
let results = realm.objects(Parent.self).filter("ANY kids == %@", thisKid)
Конечно, оцените, чтобы увидеть, есть ли какие-либо результаты
if results.count == 0 {
print("kid: \(thisKid?.name) has no parents.")
} else {
print("found parents for kid: \(thisKid?.name)")
for kid in results {
print(kid)
}
}
РЕДАКТИРОВАТЬ:
В приведенном выше коде, Вы можете перебрать каждого ребенка и посмотреть, есть ли у него родитель, а если нет, удалить его. В качестве проблемы, как насчет кода, который удалит всех детей, у которых нет родителей, вместо итерации. allKids - это список областей.
let foundParents = realm.objects(Parent.self).filter("ANY kids IN %@", allKids)
let kidsThatHaveParents: [Kid] = allKids.compactMap { kid in
let x = foundParents.first { $0.kids.contains( kid ) }
if x != nil { //this is just for clarity, could be shortened
return kid
}
return nil
}
let haveParentSet = Set(kidsThatHaveParents)
let kidsToCheckSet = Set(allKids)
let kidsToRemove = kidsToCheckSet.subtracting(haveParentSet)
Единственным недостатком этого является то, что я использовал Набор, чтобы вычесть детей, у которых есть родители. Это загрузило бы всех детей в память, минуя ленивый аспект загрузки царства. Другой вариант - просто удалить каждого ребенка, у которого есть родитель, из списка kidsToLook for realm.