swift - 返回 Realm 中任何可以删除的对象

标签 swift 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>无法创建集合,因为您无法存储纯 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/

相关文章:

ios - 仅当文本是时才在 UILabel 中显示背景颜色

javascript - Realm React-Native : Access same realm from JS(react native code) and android(java)

sqlite - 离线优先方法和 PWA 的区别?

ios - 为 Realm Cloud 中的所有 Realm 重置架构

ios - Swift 3 和 lldb : Print frame of UIView, 给定十六进制地址

swift - 排序获取的结果 Controller 数据,使用两个属性,使用排序描述符

swift - 解析查询结果出错

ios - 保存后作为成员的 Realm 对象为零

xcode - Realm - 模块文件是由旧版本的编译器创建的

swift - 在 Realm 移动平台上从客户端创建用户