我的模型有一个GroupOfEvents领域对象,它通过属性Eventevents领域对象有多对多的关系。每个Event都有一个date属性。
我有一个Results<GroupOfEvents>,我想按date中第一个事件的events排序。如果我对一个普通的swift数组进行排序,它看起来像:

groupsOfEvents.sorted(by: { $0.events.first!.date > $1.events.first!.date })

下面是我对aResults<GroupOfEvents>排序的失败尝试:
groupsOfEvents.sorted(byKeyPath: "events.first.date")

它给出了错误:
“无法按键路径”events.first.date“排序”:属性”GroupOfEvents.events“属于不支持的类型”array“。”
我怎样才能按我想要的方式分类呢?
你可能会问我的问题:
为什么要按第一个事件的日期排序?这不是人们通常做的事。
事实上,GroupOfEvents包含具有相同日期的事件,因此使用events中任何事件的日期都将有效。
为什么不将date属性移到GroupOfEvents
是的,我可以这样做,但我正在寻找替代方案。
你为什么不把GroupOfEvents去掉,把所有的Events都取出来,然后按日期分组呢?
尽管aevents中的所有GroupOfEvents都有相同的日期。两个不同的GroupOfEvents事件也可以有相同的日期。还有其他一些特性可以区分GroupOfEvents

最佳答案

从Realm的头文件中,我看到以下注释:
集合只能按booleanDateNSDate、单精度和双精度floating pointintegerstring类型的属性排序。
这意味着您的事件数组不是受支持的密钥路径,正如您收到的错误所说。
更新
根据this答案,您可以将Results类型的对象转换为数组。所以你可以试试下面的方法:

let groupsOfEventsSortedArray = Array(groupsOfEvents).sorted { $0.events.first!.date > $1.events.first!.date }

关于swift - 如何按多对多关系中第一项的键路径对 Realm 结果进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51509351/

10-10 09:54