如何获得ForEach方法的IndexSet而不使用:perform



这是我最初使用滑动删除列表中的项目的方法。

@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")
}
} 
}

让结构体HashableIdentifiable,您可以执行这样的删除操作:

,

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 }indexisindex

iOS 15 +

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)
}

相关内容

最新更新