RealmSwift: запрос всех объектов одного универсального типа - PullRequest
0 голосов
/ 07 марта 2019

У меня есть общая функция для сохранения объектов в моем хранилище.Существующие в Realm объекты, которых нет в этом списке, должны быть удалены.Как получить все существующие объекты одного типа в общем?

Вот мой текущий подход:

  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)
}

1 Ответ

0 голосов
/ 12 марта 2019

Вот моя общая функция для выборки объектов области.

    import RealmSwift

    func queryObjects<T: Object>(with type: T.Type) throws -> Results<T> {
        let realm = try Realm()
        return realm.objects(T.self)
    }

Пример использования, если вам нужен массив моделей, поскольку Realm возвращает собственный тип. Результаты с лениво загруженными объектами:

        do {
            let objects = try queryObjects(with: Model.self).map { $0 }
        } catch {
            print("Can not get Model: \(error)")
        }
    }

Обновление здесь совершенно общая функция determineOrphans:

    private func determineOrphans<T: Object>(remoteObjects: [T]) -> [T] {
        guard let localObjects = try? queryObjects(with: T.self ) else {
            return []
        }

        let objectsToDelete = localObjects.filter { !remoteObjects.contains($0) }
        logger.info("These \(objectsToDelete.count) objects should be deleted: \(objectsToDelete)")
        return objectsToDelete.map { $0 }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...