这是我最初使用滑动删除列表中的项目的方法。
@AppStorage("arrayOfItems") var arrayOfItems: [String] = []
if(arrayOfItems.count > 0) {
ForEach((0..<arrayOfItems.count), id: .self) {
Text(arrayOfItems[$0])
}
.onDelete(perform: deleteSelectedItems) }
func deleteSelectedItems(with indexSet: IndexSet) {
indexSet.forEach ({ index in
arrayOfItems.remove(at: index)
})
}
然而,现在我正在使用IOS15禁用onDelete
方法的.swipeactions
,所以我不确定在deleteSelectedItems
函数中使用什么参数。
@AppStorage("arrayOfItems") var arrayOfItems: [String] = []
if(arrayOfItems.count > 0) {
ForEach((0..<arrayOfItems.count), id: .self) {
Text(arrayOfItems[$0])
}
.swipeActions(allowsFullSwipe: false) {
Button(role: .destructive) {
deleteSelectedItems(with: IndexSet???????????)} label: {
Label("Delete", systemImage: "trash")
}
}
}
让结构体Hashable
和Identifiable
,您可以执行这样的删除操作:
,
struct A:Identifiable, Hashable {
let id = UUID()
var num: Int
}
List {
ForEach(arrItems, id: .self) { (item) in
Text("Item Number (item.num)")
.swipeActions(edge: .trailing) {
Button(role: .destructive) {
withAnimation {
self.arrItems.removeAll {$0.id == item.id}
}
} label: {
Label("Delete", systemImage: "trash")
}
}
}
}
执行ForEach((0..<arrayOfItems.count), id: .self) { index in }
。index
isindex
ForEach((0..<arrayOfItems.count), id: .self) { index in // NEW
Text(arrayOfItems[index])
.swipeActions(allowsFullSwipe: false) {
Button(role: .destructive) {
deleteSelectedItems(index)} label: {
Label("Delete", systemImage: "trash")
}
}
}
iOS 14
ForEach((0..<arrayOfItems.count), id: .self) {
Text(arrayOfItems[$0])
}
.onDelete { indexset in
indexSet.forEach ({ index in
deleteSelectedItems(index)
})
}
修改deleteSelectedItems
为this
func deleteSelectedItems(with index: Int) {
arrayOfItems.remove(at: index)
}