我制作了一个名为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
    })
}


使用Object类型的Realm Object,但是默认情况下,此类型对象不实现我的协议,因此我无法检测到该对象是否符合协议Synchronizable,它说:

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


有没有办法做到这一点 ?我认为通过Realm object查询的方式是错误的。

错误的方法?

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

此类将与我希望可同步的Realm对象建立关系,例如:

class SynchronizableObject : Object {

// MARK: - Realm Relationships

dynamic var synchronizables : List<Object>()

}


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

最佳答案

@AnthonyR您无法直接查询/过滤RealmSwift.Object,必须在完成后从RealmSwift.Object继承模型

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


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

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


如果您再说明一点,您想做什么可能是我可以帮助您

08-05 04:28
查看更多