我想创建一个删除任何给定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>'
什么不能归还物品?它是一个子类。感谢。
答案 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)
}
}