我有兩個領域類...第一類Patient包含一個或多個第二類Record,如下所示:
class Patient: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var records: List<Record>
}
class Record: EmbeddedObject {
@Persisted var date = Date()
@Persisted(originProperty: "records") var patient: LinkingObjects<Patient>
}
我想patients按date最后一個排序record,如下所示:
patients = realm.objects(Patient.self).sorted(byKeyPath: "records.last.date", ascending: false)
使用領域和迅捷可以做到這一點嗎?
謝謝
uj5u.com熱心網友回復:
目標是按記錄串列中記錄的最新日期對患者進行排序。
這是可以做到的,有幾種方法。一種選擇是,在填充患者記錄時,將記錄的單獨屬性保留為最新日期。
患者物件看起來像這樣
class Patient: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted private var records: List<Record>
@Persisted var lastRecord: Record!
func addRecord(withRecod: Record) {
self.records.append(withRecord)
let recordArray = Array(self.records)
if withRecod != nil {
let sortedRecords = recordArray.sorted { $0.date < $1.date }
let lastRecord = sortedRecords.last!
let rec = Record(value: lastRecord)
self.lastRecord = rec
}
}
}
我們添加了一個函式來填充記錄串列并將該串列設為私有,因此您必須使用該addRecord函式來填充屬性。
需要陣列,因為 Realm 不在記憶體中排序 - 因此,如果物件尚未持久化,則無法對記錄進行排序,因此該任務利用陣列。
最后,陣列按日期排序,然后我們復制最后一條記錄以存盤在 lastRecord 屬性中。嵌入式物件永遠不會“自行”持久化,它們不能像其他物件一樣被參考,因此副本可以使其作業。
然后排序變得容易
let patients = realm.objects(Patient.self).sorted(byKeyPath: "lastRecord.date")
記住 aupdateRecord和一個deleteRecord函式可能是為了重新計算lastRecord這些變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454060.html
上一篇:如何找到字串R中的第二高位
