Swift 中 Realm 查询的交叉引用谓词
Posted
技术标签:
【中文标题】Swift 中 Realm 查询的交叉引用谓词【英文标题】:Cross-referencing predicate for Realm queries in Swift 【发布时间】:2016-12-04 07:56:16 【问题描述】:所以我最近一直在学习 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
...
在我正在构建的应用程序中,用户可以选择一组Object A
,应用程序会从服务器查询选择集的状态。返回结果将存储/呈现在Object B
。现在,我需要为Object B
编写一个查询/谓词:
let resultObjectsB = realm.objects(B).filter('predicate2')
这样resultObjectB
条目中的propertyA
可以在resultObjectsA
条目中的propertyA
中找到,就像一对一映射一样。
我不确定这样的谓词是否可行。如果还有其他方法可以实现我想在这里做的事情,我也非常渴望学习。
【问题讨论】:
【参考方案1】:查询所有(实际上应该有一个对象,因为主键)对象B
where objectB.propertyA == objectA.propertyA
使用:
let resultObjectsB = realm.objects(B).filter('propertyA = %@', objectA.propertyA)
另一种选择是使用 A
和 B
之间的一对一关系,在 https://realm.io/docs/swift/latest/#to-one-relationships 了解更多信息
【讨论】:
以上是关于Swift 中 Realm 查询的交叉引用谓词的主要内容,如果未能解决你的问题,请参考以下文章
在 SWIFT 的谓词中使用“timeIntervalSinceNow”
如何在 Swift 中使用“IN”谓词进行 ckQuery?