Я искал возможность реализовать функцию удаления в списках, которая обычно используется в приложениях. Я следовал нескольким урокам, касающимся использования функции .onDelete, и настроил ее именно так, как это показано в видео. Проблема, насколько я могу судить, состоит в том, что их код не применим к моему, потому что они используют простой массив строк или чисел, тогда как мой список генерируется из массива объектов. Я точно не знаю, как манипулировать кодом, который они предоставляют, чтобы применить к моей ситуации. Ниже приводится то, что у меня есть, и я опишу, в чем проблема после факта.
struct SavedView: View {
@State var saves: [SavedModel]
var body: some View {
ZStack {
GeometryReader { metrics in
VStack {
if (self.saves.isEmpty) {
List {
Text("You have nothing saved currently")
}
} else {
List {
ForEach(self.saves) { result in
Text(result.name).font(.system(size: 26)).fontWeight(.semibold)
}
.onDelete(perform: deleteItem)
}
}
}.navigationBarTitle("Saves").navigationBarItems(trailing: EditButton())
}
}
}
func deleteItem(at offsets: IndexSet) {
saves.remove(atOffsets: offsets)
}
}
public struct SavedModel: Codable, Identifiable {
public let id: Int
public let name: String
enum CodingKeys: String, CodingKey {
case id = "id"
case name = "name"
}
}
Проблема с кодом, как он есть, который в точности взят и применяется из учебника , это говорит о том, что мне нужно изменить .onDelete (execute: deleteItem) на .onDelete (execute: self.deleteItem) и вместо saves.remove (atOffsets: offsets), self.saves.remove (atOffsets: offsets) проблема в том, что он говорит, что переменные self.XXX не могут быть видоизменены, поэтому я не могу удалить его, а затем всякий раз, когда я изменяю его, чтобы не иметь self., я просто получаю больше проблем, которые возникают. Я действительно не знаю, что делать. Любая помощь будет принята с благодарностью.