Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RealmSwift:查询相同泛型类型的所有对象_Swift_Realm - Fatal编程技术网

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} }
当然,这样做是可能的。但我需要一个更通用的解决方案,因为我不想为每个对象类型复制此代码。请查看我的更新代码。