我有一个对象数组,我可以在SwiftUI视图中呈现。将它们显示为List非常简单,但是我想创建部分并按元素的属性之一分组。
我尝试使用Dictionary(grouping:by:)
,然后按字典的键排序以获得部分,但这会减慢UI。感觉我做错了什么。
List {
ForEach(myArray.keys.sorted(), id: \.self) { mySection in
Section(header: Text(mySection)) {
ForEach(myArray[mySection] ?? []) { element in
NavigationLink {
DetailView(element: element)
} label: {
ElementRow(element: element)
}
}
}
}
}
有没有比Dictionary(grouping:by:)
更有效的方法来将从SwiftData检索的数据分组到节中?
2条答案
按热度按时间h9a6wy2h1#
对于分组数据,请尝试使用
OutlineGroup
,而不是List
。您可能需要将数据转换为组,这可以在父
View
主体中的计算属性中完成,您可以在其中初始化包含OutlineGroup
的View
。cgvd09ve2#
我在GitHub上找到了一个名为SectionedQuery的框架,它完全满足了我的需求:
为了将它与 predicate 一起使用,我做了以下操作: