Как заставить функцию generi c удалять данные в двух таблицах Realm? - PullRequest
0 голосов
/ 19 февраля 2020

Код:

  class Realm_manager {

        private init() {}

        static let shared = Realm_manager()

        let realm = try! Realm()

         func deleteObjects<T: Object,T2: Object>(id: String,obj1: T,obj2: T2) {
             try! realm.write {
            realm.delete(realm.objects(T2.self).filter("set_id=%@", id))
            realm.delete(realm.objects(T.self).filter("id=%@", id))
        }
    }
    }

вызов функции в V C:

Realm_manager.shared.deleteObjects(id: array[indexPath.row].id, obj1: className1, obj2: className2)

Ошибка в V C:

Невозможно преобразовать значение типа 'className1.Type' к ожидаемому типу аргумента 'Object'


Как я могу решить эту ошибку?

1 Ответ

1 голос
/ 19 февраля 2020

Как вы получаете / устанавливаете className1 и className2? Должно работать так:

let object = Object()
deleteObjects(id: "1234", obj1: object, obj2: object)

На самом деле, вашему deleteObjects не нужно ничего знать о реальных объектах. Могли бы:

func deleteObjects<T: Object,T2: Object>(id: String, obj1: T.Type, obj2: T2.Type) {
    try! realm.write {
        realm.delete(realm.objects(T2.self).filter("set_id=%@", id))
        realm.delete(realm.objects(T.self).filter("id=%@", id))
    }
}

И позвонить:

deleteObjects(id: "1234", obj1: Object.self, obj2: Object.self)

Или более удобным было бы:

func deleteObjectsWith(id: String, withTypes types: [Object.Type]) {
    try! realm.write {
        types.forEach { objectType in
            let objects = realm.objects(objectType).filter("set_id=%@", id)
            realm.delete(objects)
        }
    }
}

И позвонить:

deleteObjectsWith(id: "1234", withTypes: [Object.self, Object.self])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...