#arrays #swift #sorting #core-data
#массивы #swift #сортировка #core-data
Вопрос:
У меня есть массив объектов из основных данных, которые я хотел бы отсортировать в функции в дочернем представлении. Я знаю, как сортировать с помощью .sorted(by:{})
, но проблема заключается в том, чтобы присвоить отсортированному массиву обратно переменную ObservedObject, чтобы пользовательский интерфейс обновлялся с отсортированными данными.
В приведенном ниже коде, когда я пытаюсь это сделать habits = habits.sorted(by:{})
, я получаю следующие ошибки:
- Невозможно присвоить свойству: ‘self’ является неизменяемым
- Отметьте метод ‘mutating’, чтобы сделать ‘self’ изменяемым
- Не удается присвоить значение типа ‘[FetchedResults.Элемент]’ (он же ‘Array’) для ввода ‘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() }
}
}
}
Комментарии:
1. Вместо этого добавить NSSortDescriptor к вашему запросу на выборку?
2. Ваши параметры сортировки странные, они принимают параметр, который не используется, и вызов
moc.save()
не окажет никакого влияния на порядок сортировки, если это то, во что вы верите3. Спасибо Joakim, re: NSSortDescriptor, я пробовал это, но я хочу отсортировать после выборки. Приложение, которое я создаю, предназначено для проверки ежедневных привычек, поэтому, как только пользователь отметил привычку на день, я хочу, чтобы эта привычка находилась в нижней части списка.
4. Re: функция sortHabits, я попытался максимально упростить блок кода для своего вопроса, но случайно оставил эти несоответствия. Сейчас я обновлю исходный код вопроса.
5. Но если вы обновите одну привычку, не будет ли @fetchRequest обновляться автоматически?