Core data SwiftUI列表,包含从核心数据获取的部分

Core data SwiftUI列表,包含从核心数据获取的部分,core-data,swiftui,nsfetchedresultscontroller,Core Data,Swiftui,Nsfetchedresultscontroller,在objective-c中,我可以使用如下方式从核心数据中获取对象的分段列表: self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"ispurchased"

在objective-c中,我可以使用如下方式从核心数据中获取对象的分段列表:

self.fetchedResultsController = [[NSFetchedResultsController alloc]
         initWithFetchRequest:fetchRequest
         managedObjectContext:managedObjectContext
           sectionNameKeyPath:@"ispurchased"
                    cacheName:nil];
然后NSFetchedResultsController会自动将数据以节和行的形式提供给我

我第一次尝试使用SwiftUI,我试图找出如何实现这样一个分区列表。我发现很多示例使用了一些以分段方式预先构造的罐装数组数据,但我不知道如何执行分段获取请求,也不知道如何将其与列表集成

struct EasyModeList: View {
    @FetchRequest(
        sortDescriptors: [
            NSSortDescriptor(keyPath: \EasyMode.ispurchased, ascending: true),
            NSSortDescriptor(keyPath: \EasyMode.ispurchasable, ascending: false),
            NSSortDescriptor(keyPath: \EasyMode.name, ascending: true),
        ],
        animation: .default)
    var easymodes: FetchedResults<EasyMode>

    @Environment(\.managedObjectContext)
    var viewContext

    var body: some View {
        List {
            ForEach(self.easymodes, id: \.self) { easymode in
                NavigationLink(
                    destination: DetailView(easymode: easymode)
                ) {
                    VStack {
                        Text("\(easymode.name!)")
                    }
                }
            }
        }
    }
}
struct EasyModeList:View{
@获取请求(
sortDescriptors:[
NSSortDescriptor(密钥路径:\EasyMode.ispurchased,升序:true),
NSSortDescriptor(密钥路径:\EasyMode.ispurchasable,升序:false),
NSSortDescriptor(键路径:\EasyMode.name,升序:true),
],
动画:。默认设置)
var easymodes:FetchedResults
@环境(\.managedObjectContext)
var viewContext
var body:一些观点{
名单{
ForEach(self.easymodes,id:\.self){easymode in
导航链接(
目的地:详细视图(easymode:easymode)
) {
VStack{
文本(\(easymode.name!))
}
}
}
}
}
}

SwiftUI是否容易支持这些类型的分段列表?是否有一个不同的范例,我应该转移我的大脑

我也在寻找一个合适的解决方案。现在我将分享我所做的尝试。我的部分是通过字符串标题,但我会根据您的数据进行调整

@FetchRequest(...) var managedEasyModes: FetchedResults<EasyMode>

private var easyModes: [String: [EasyMode]] {
    Dictionary(grouping: managedEasyModes) { easymode in
        easymode.ispurchased ? "Purchased" : "Not Purchased"
    }
}

private var sections: [String] {
    easyModes.keys.sorted(by: >)
}

var body: some View {
    ForEach(sections, id: \.self) { section in
        Section(header: Text(section)) {
            ForEach(easyModes[section]!) { easyMode in
                NavigationLink(destination: EasyModeView(easyMode: easyMode)) {
                    EasyModeRowView(easyMode: easyMode)
                }
            }
        }
    }
}
@FetchRequest(…)var managedEasyModes:FetchedResults
私有变量easyModes:[字符串:[EasyMode]]{
字典(分组:managedEasyModes){easymode in
easymode.ispurchased?“已购买”:“未购买”
}
}
私有变量节:[字符串]{
easyModes.keys.sorted(按:>)
}
var body:一些观点{
ForEach(sections,id:\.self){section in
节(标题:文本(节)){
ForEach(easyModes[节]!){easyMode in
导航链接(目的地:EasyModeView(easyMode:easyMode)){
EasyModeRowView(easyMode:easyMode)
}
}
}
}
}