我的模型有一个GroupOfEvents
领域对象,它通过属性Event
与events
领域对象有多对多的关系。每个Event
都有一个date
属性。
我有一个Results<GroupOfEvents>
,我想按date
中第一个事件的events
排序。如果我对一个普通的swift数组进行排序,它看起来像:
groupsOfEvents.sorted(by: { $0.events.first!.date > $1.events.first!.date })
下面是我对a
Results<GroupOfEvents>
排序的失败尝试:groupsOfEvents.sorted(byKeyPath: "events.first.date")
它给出了错误:
“无法按键路径”events.first.date“排序”:属性”GroupOfEvents.events“属于不支持的类型”array“。”
我怎样才能按我想要的方式分类呢?
你可能会问我的问题:
为什么要按第一个事件的日期排序?这不是人们通常做的事。
事实上,
GroupOfEvents
包含具有相同日期的事件,因此使用events
中任何事件的日期都将有效。为什么不将
date
属性移到GroupOfEvents
?是的,我可以这样做,但我正在寻找替代方案。
你为什么不把
GroupOfEvents
去掉,把所有的Events
都取出来,然后按日期分组呢?尽管a
events
中的所有GroupOfEvents
都有相同的日期。两个不同的GroupOfEvents
事件也可以有相同的日期。还有其他一些特性可以区分GroupOfEvents
。 最佳答案
从Realm的头文件中,我看到以下注释:
集合只能按boolean
、Date
、NSDate
、单精度和双精度floating point
、integer
和string
类型的属性排序。
这意味着您的事件数组不是受支持的密钥路径,正如您收到的错误所说。
更新
根据this答案,您可以将Results
类型的对象转换为数组。所以你可以试试下面的方法:
let groupsOfEventsSortedArray = Array(groupsOfEvents).sorted { $0.events.first!.date > $1.events.first!.date }
关于swift - 如何按多对多关系中第一项的键路径对 Realm 结果进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51509351/