【问题标题】:Detect if a Realm object comforms to a specific protocol检测 Realm 对象是否符合特定协议
【发布时间】:2018-03-30 11:05:57
【问题描述】:

我制定了一个名为 Synchronizable 的协议,并且我的一些 Realm 对象符合此协议。

如:

class Comment : Object, Synchronizable {
// ...
}

我想查询所有本地Realm对象,并检索所有符合此协议的对象。

所以我做了类似的事情:

func getObjectsToSynchronize() -> [Object]{
    Array(realm.objects(Object.self)).filter({
        if let $0 = $0 as? Synchronizable {
            return true
        }
        return false
    })
}

ObjectRealm Object 类型,但是这个类型的对象默认没有实现我的协议,所以我无法检测该对象是否符合协议Synchronizable,它说:

Expression pattern of type 'Object' cannot match values of type 'Synchronizable?'

有没有办法做到这一点?我认为我在 Realm object 中查询时走错路了。

走错路了?

也许我必须创建另一个名为 SynchronizableObjectRealm 类对象,它继承自 Object 领域类。

这个类会和我想要同步的Realm对象有关系,比如:

class SynchronizableObject : Object {

// MARK: - Realm Relationships

dynamic var synchronizables : List<Object>()

}

然后我应该用Realm 对象查询这个类

【问题讨论】:

    标签: swift realm


    【解决方案1】:

    @AnthonyR 你不能直接查询/过滤RealmSwift.Object,你必须像你所做的那样从RealmSwift.Object 继承你的模型

    class Comment : Object, Synchronizable {
        // ...
    }
    

    然后您可以查询/过滤所有继承类型的对象:

    func getObjectsToSynchronize() -> Results<Comment> {
        return realm.objects(Comment.self)
    }
    

    如果你再解释一下你想做什么,我可以帮助你

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多