嘿,这个问题我之前也踩过坑,本质是Realm的Results<T>泛型是不变类型导致的——也就是说,哪怕E是Object的子类,Results<E>也不能直接自动转换成Results<Object>,编译器会直接报错。
先解决当前的类型转换错误
有两种简单的处理方式:
方式1:调整返回类型为具体子类的Results(推荐)
既然你查询的是E类型的对象,直接把返回类型改成Results<E>就完全匹配了,代码更精确也更安全:
class Test: Object{
class E: Test{
func h() -> Results<E>{ // 这里改成Results<E>
return LocalFilesManager.realm.objects(E.self)
}
func remove(results: Results<Object>){
try? LocalFilesManager.realm.write {
LocalFilesManager.realm.delete(results)
}
}
}
}
方式2:安全强制转换为Results