返回 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>'

它不能返回对象吗?它是一个子类。谢谢。

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

您可以通过简单地将函数的返回类型更改为 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子类上使用的泛型函数。这些通用实现可以在下面找到:

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

最新更新