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:{})
时,会出现以下错误:
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不会自动更新吗?