返回Realm中可以删除的任何对象

时间:2018-03-19 20:22:35

标签: swift realm

我想创建一个删除任何给定Realm对象的方法。这就是我的功能:

class Test: Object{
    class E: Test{
        func h() -> Results<Object>{
            return LocalFilesManager.realm.objects(E) //error
        }
        func remove(results: Results<Object>){
            try? LocalFilesManager.realm.write {
                LocalFilesManager.realm.delete(results)
            }
        }
    }
}

我收到错误说:

Cannot convert return expression of type 'Results<Test.E>' to return type 'Results<Object>'

什么不能归还物品?它是一个子类。感谢。

1 个答案:

答案 0 :(得分:1)

问题是Results是一个通用的同源集合,泛型类型在Swift中是不变的,这意味着Results<Object>Results<E>没有类型关系,即使E也是如此是Object的子类。由于这些限制,Results只能保存单个Object子类中的对象,并且无法创建Results<Object>集合,因为您无法在Realm中存储纯Object个对象。 / p>

您只需将功能的返回类型更改为Results<E>即可解决您的问题。

func h() -> Results<E>{
    return LocalFilesManager.realm.objects(E.self)
}

您的删除功能也会遇到同样的问题。

func remove(results: Results<E>){
    try? realm.write {
        LocalFilesManager.realm.delete(results)
    }
}

但是,由于您很可能拥有相当多的Realm Object模型类,因此我建议将您的两个方法都更改为可以在任何Object子类上使用的泛型函数。这些通用实现可以在下面找到:

func getAllObjects<T:Object>(of type:T.Type) -> Results<T>{
    return LocalFilesManager.realm.objects(T.self)
}

func remove<T:Object>(results: Results<T>){
    try? realm.write {
        LocalFilesManager.realm.delete(results)
    }
}