Delete a item row from list - SwiftUI

Viewed 454

Now in SwiftUI 3.0 and iOS 15 we have a swipeActions() method

but when use swipeActions() no longer to use onDelete(perform: )

I can't write an action code to delete items from list

List{
    TextField("Create new task...", text: $newTaskText)
        .onSubmit {
            taskVM.tasks.append(Task(title: newTaskText, isCompleted: false))
            newTaskText = ""
        }
        .submitLabel(.done)
    ForEach($taskVM.tasks) { $task in
        HStack{
            Text(task.title)
            Spacer()
            Text(task.isCompleted ? "Completed ✅" : "")
                .foregroundColor(.gray)
        }
        .swipeActions(edge: .trailing) {
            Button{
                task.isCompleted.toggle()
            } label: {
                Label("Complete", systemImage: task.isCompleted ? "clear" : "checkmark")
            }
            .tint(task.isCompleted ? .red : .green)
        }
        .swipeActions(edge: .leading) {
            Button(role: .destructive){
                print("Deleted")
            } label: {
                Label("Delete", systemImage: "trash")
            }
        }
    }
 }
1 Answers

If your Task is Identifiable (if not it worth making it), then you could make delete action like

.swipeActions(edge: .leading) {
    Button(role: .destructive){
        withAnimation {
            tasks.removeAll { task.id == $0.id }
        }
    } label: {
        Label("Delete", systemImage: "trash")
    }
}
Related