我想创建一个删除任何给定 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>
没有类型关系,即使E
是 Object
的子类。由于这些限制,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)
}
}