Я могу заставить работать плоский список с поддержкой Core Data (без модификатора .listStyle) с функциями удаления и перемещения.
Но когда я попытался сгруппировать список
}.listStyle(GroupedListStyle())
колеса концептуально отваливаются. Параметр модификатора onDelete имеет сигнатуру функции IndexSet? -> Пустота. Поэтому я не могу передать объект, который нужно удалить.
onMove - это, по сути, та же проблема, только хуже. Оба модификатора полагаются на источник данных, который, как предполагается, представляет собой плоский массив последовательных значений, доступ к которому может получить подписка IndexSet. Но я не могу придумать, как построить сгруппированный список, используя плоский источник данных.
Мое тело просмотра выглядит так:
//I'm building the list using two independent arrays. This makes onDelete impossible to implement as recommended
ForEach(folders, id: \.self) { folder in
Section(header: Text(folder.title) ) {
ForEach(self.allProjects.filter{$0.folder == folder}, id: \.self){ project in
Text(project.title)
//this modifier is where the confusion starts:
}.onDelete(perform: self.delete)
}
}
}.listStyle(GroupedListStyle())
func delete (at offsets: IndexSet) {
// ??.remove(atOffsets: offsets)
//Since I use two arrays to construct group list, I can't use generic remove at Offsets call. And I can't figure out a way to pass in the managed object.
}
func move (from source: IndexSet, to destination: Int) {
////same problem here. a grouped list has Dynamic Views produced by multiple arrays, instead of the single array the move function is looking for.
}