Sto tentando di fare una base SwiftUI elenco in cui ogni nuova voce della lista è presentata in cima alla lista. Per fare questo, ho aggiunto .invertito() per la matrice passata in un ciclo ForEach, rappresentato da viewModel.itemList
. Ho anche impostato .onDelete per gestire la rimozione di elementi dell'elenco. Tuttavia, quando si elimina un elemento, ad esempio l'ultimo elemento della lista, invece di eliminare l'ultimo elemento dell'array (l'elemento in cima alla lista). Come posso configurare .onDelete per eliminare l'elemento corretto quando la matrice è invertito?
Vedere il mio codice riportato di seguito. Grazie!
ContentView
struct ContentView: View {
@StateObject var viewModel = ToDoListViewModel()
@State private var listItemName = ""
var body: some View {
NavigationView {
VStack(alignment: .leading) {
List {
ForEach(viewModel.itemList.reversed()) { item in
Text(item.listItem)
}.onDelete { index in
self.viewModel.itemList.remove(atOffsets: index)
}
}
HStack {
TextField("Enter List Item", text: $listItemName)
Button(action: {
viewModel.addToList(ToDoModel(listItem: listItemName))
listItemName = ""
}) {
Image(systemName: "plus")
.font(.largeTitle)
.frame(width: 75, height: 75)
.foregroundColor(Color.white)
.background(Color.blue)
.clipShape(Circle())
}
}.frame(minWidth: 100, idealWidth: 150, maxWidth: 500, minHeight: 30, idealHeight: 40, maxHeight: 50, alignment: .leading)
.padding(.leading, 16)
.padding(.trailing, 16)
}.navigationBarTitle("To Do List", displayMode: .inline)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Modello
struct ToDoModel: Identifiable, Codable {
var id = UUID()
var listItem: String = ""
}
ViewModel
class ToDoListViewModel: ObservableObject {
@Published var itemList = [ToDoModel]()
func addToList( _ item: ToDoModel) {
itemList.append(item)
}
}