Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift:对函数中的核心数据数组进行排序_Arrays_Swift_Sorting_Core Data - Fatal编程技术网

Arrays Swift:对函数中的核心数据数组进行排序

Arrays Swift:对函数中的核心数据数组进行排序,arrays,swift,sorting,core-data,Arrays,Swift,Sorting,Core Data,我有一个来自核心数据的对象数组,我想在子视图的函数中对其进行排序。我知道如何使用.sorted(by:{})进行排序,但问题是将排序后的数组分配回ObservedObject变量,以便UI使用排序后的数据进行更新 在下面的代码中,当我尝试执行habits=habits.sorted(by:{})时,会出现以下错误: 无法分配给属性:“self”是不可变的 将方法标记为“mutating”,使“self”可变 无法将类型“[FetchedResults.Element]”(也称为“数组”)的值分配

我有一个来自核心数据的对象数组,我想在子视图的函数中对其进行排序。我知道如何使用
.sorted(by:{})
进行排序,但问题是将排序后的数组分配回ObservedObject变量,以便UI使用排序后的数据进行更新

在下面的代码中,当我尝试执行
habits=habits.sorted(by:{})
时,会出现以下错误:

  • 无法分配给属性:“self”是不可变的
  • 将方法标记为“mutating”,使“self”可变
  • 无法将类型“[FetchedResults.Element]”(也称为“数组”)的值分配给类型“FetchedResults”
  • 是否有人知道更好的方法或如何解决错误

    struct ContentView: View {
        @Environment(\.managedObjectContext) var moc
        @FetchRequest(entity: Habit.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Habit.id, ascending: true)]) var habits: FetchedResults<Habit>
        var body: some View {
            NavigationView {
                VStack {
                    List {
                        ForEach(habits, id: \.self) { habit in
                            VStack(alignment: .leading) {
                                Text(habit.title)
                                HStack {
                                    ForEach(habit.dayArray.count-7..<habit.dayArray.count, id: \.self) { index in
                                        DayView(day: habit.dayArray[index], habits: self.habits)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        struct DayView: View {
            @Environment(\.managedObjectContext) var moc
            @ObservedObject var day: Day
            var habits: FetchedResults<Habit>
            var body: some View {
                Text(“\(day.wrappedShort)“).onTapGesture {
                    self.sortHabits(day: self.day)
                }
            }
            func sortHabits() {
                self.habits = habits.sorted{ $0.title.uppercased() < $1.title.uppercased() }
            }
        }
    }
    
    struct ContentView:View{
    @环境(\.managedObjectContext)变量moc
    @FetchRequest(entity:Habity.entity(),SortDescriptor:[NSSortDescriptor(keyPath:\Habity.id,升序:true)])var hobits:FetchedResults
    var body:一些观点{
    导航视图{
    VStack{
    名单{
    ForEach(习惯,id:\.self){中的习惯
    VStack(对齐:。前导){
    文本(习惯、标题)
    HStack{
    
    ForEach(habity.dayArray.count-7..将NSSortDescriptor添加到您的获取请求中?您的sortHabits很奇怪,它使用一个未使用的参数并调用
    moc.save()
    如果您认为排序顺序是正确的,则不会对排序顺序产生任何影响谢谢Joakim,re:NSSortDescriptor,我尝试了这个方法,但我想在提取后进行排序。我正在构建的应用程序是检查日常习惯,因此,一旦用户划掉了一天的习惯,我希望该习惯会排在列表的底部。re:sortHabits函数,我试图为我的问题尽可能简化代码块,但意外地留下了这些不一致之处。我现在将更新原始问题代码。但是如果你更新一个习惯,@FetchRequest不会自动更新吗?