我想创建一个方法来删除任何给定的 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>
无法创建集合,因为您无法存储纯 Object
Realm 中的对象。
您只需将函数的返回类型更改为 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)
}
}
关于swift - 返回 Realm 中任何可以删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371762/