Estoy tratando de hacer un básico SwiftUI lista en la que cada nuevo elemento de lista que se presenta en la parte superior de la lista. Para hacer esto, he anexado .invierte (es) a la matriz pasada en el bucle ForEach, representado por viewModel.itemList
. También he configurado .onDelete para controlar la eliminación de los elementos de la lista. Sin embargo, cuando puedo eliminar un elemento, como el último elemento de la lista, en vez de eso, se elimina el último elemento de la matriz (el elemento en la parte superior de la lista). ¿Cómo puedo configurar .onDelete para eliminar el elemento correcto cuando la matriz se invierte?
Ver mi código de abajo. Gracias!
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()
}
}
Modelo
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)
}
}