RealmSwift:查询相同泛型类型的所有对象
我有一个通用函数将对象保存到我的领域存储中。应删除域中不在该列表中的现有对象。如何一般地获取相同类型的所有现有对象 以下是我目前的做法:RealmSwift:查询相同泛型类型的所有对象,swift,realm,Swift,Realm,我有一个通用函数将对象保存到我的领域存储中。应删除域中不在该列表中的现有对象。如何一般地获取相同类型的所有现有对象 以下是我目前的做法: private func determineOrphans(remoteObjects: [Object])->[Object]?{ guard let remoteObject = remoteObjects.first else { return nil } guard let localObjects
private func determineOrphans(remoteObjects: [Object])->[Object]?{
guard let remoteObject = remoteObjects.first else {
return nil
}
guard let localObjects = try? queryObjects(with: type(of: remoteObject) ) else{
return nil
}
let allLocalObjectsSet = Set(localObjects.toArray())
let objectsToDelete = Array(allLocalObjectsSet.subtracting(remoteObjects))
logger.info("These \(objectsToDelete.count) objects should be deleted: \(objectsToDelete)")
return objectsToDelete
}
private func queryObjects<T: Object>(with type: T.Type) throws -> Results<T> {
return try Realm().objects(T.self)
}
下面是我的领域对象获取的通用函数 导入RealmSwift 函数查询对象类型:T.type抛出->结果{ 让领域=尝试领域 返回realm.objectsT.self } 如果需要一个模型数组,因为Realm使用延迟加载的对象返回自己的类型结果,则使用示例: 做{ let objects=尝试queryObjectswith:Model.self.map{$0} }抓住{ 打印无法获取模型:\n错误 } } 在此更新determineOrphans的完全通用函数: 私有函数determineorphansmoteobjects:[T]->[T]{ guard let localObjects=try?queryObjectswith:T.self-else{ 返回[] } 让objectsToDelete=localObjects.filter{!remoteObjects.contains$0} logger.infothis\objectsToDelete.count应删除的对象:\objectsToDelete 返回objectsToDelete.map{$0} }
当然,这样做是可能的。但我需要一个更通用的解决方案,因为我不想为每个对象类型复制此代码。请查看我的更新代码。