Swift 中 Realm 查询的交叉引用谓词

Cross-referencing predicate for Realm queries in Swift

所以我最近一直在 Swift 中学习 Realm,我遇到了一个关于数据模型之间潜在通知的设计问题。如果有人愿意透露一些见解,我们将不胜感激。

// Class A is what users mainly interact with
Class A: Object {
    dynamic var propertyA = ""
    dynamic var propertyB = ""
    dynamic var propertyC = ""

    override static func primaryKey() -> String? {
        return "propertyA"
    }
}

// Class B is what the server interacts with, like data feeding
Class B: Object {
    dynamic var propertyA = ""
    dynamic var propertyX = ""
    dynamic var propertyY = ""
    dynamic var propertyZ = ""

    override static func primaryKey() -> String? {
        return "propertyA"
    }
}


我在控制器中为 Object A 设置了一个通知块。因此,每当 resultObjectsA 中发生更改时,都会触发通知块。

let resultObjectsA = realm.objects(A).filter('predicate1')
let notificationTokenA = resultObjectsA.addNotificationBlock {
    ...
}


在我正在构建的应用程序中,用户可以select一组Object A,应用程序将查询select离子的状态从服务器设置。 return 结果在 Object B 中将是 stored/presented。现在,我需要为 Object B:

写一个 query/predicate
let resultObjectsB = realm.objects(B).filter('predicate2')

使得 resultObjectB 条目中的 propertyA 可以在 resultObjectsA 条目中的 propertyA 中找到,就像一对一的映射。

我不确定这样的谓词是否可行。如果还有其他方法可以实现我想在这里做的事情,我也很想学习。

查询所有(实际上应该有一个对象因为主键)对象B where objectB.propertyA == objectA.propertyA use:

let resultObjectsB = realm.objects(B).filter('propertyA = %@', objectA.propertyA)

另一种选择是使用 AB 之间的一对一关系,在 https://realm.io/docs/swift/latest/#to-one-relationships

了解更多信息