在SwiftUI中,.onDelete
修饰符用于处理列表中的删除操作。如果你发现在排序后的ForEach
中使用.onDelete
不起作用,可能是由于以下几个原因:
Identifiable
: .onDelete
要求数据源中的元素必须是Identifiable
的,即每个元素都有一个唯一的标识符。以下是一个示例代码,展示了如何在排序后的ForEach
中正确使用.onDelete
:
import SwiftUI
struct ContentView: View {
@State private var items = [
Item(name: "Item A", id: UUID()),
Item(name: "Item B", id: UUID()),
Item(name: "Item C", id: UUID())
]
var body: some View {
NavigationView {
List {
ForEach(items.sorted(by: {$0.name < $1.name}), id: \.id) { item in
Text(item.name)
}
.onDelete(perform: deleteItems)
}
.navigationTitle("Sortable List")
}
}
private func deleteItems(at offsets: IndexSet) {
items.remove(atOffsets: offsets)
}
}
struct Item: Identifiable {
let name: String
let id: UUID
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Item
结构体实现了Identifiable
协议,确保每个元素都有一个唯一的id
。sorted(by:)
方法对items
进行排序。.onDelete
中调用deleteItems(at:)
方法,该方法会从items
数组中移除指定索引的元素。这种模式适用于需要展示一个可排序且支持删除操作的列表,例如待办事项列表、购物车等。
通过上述方法,你应该能够在排序后的ForEach
中正确实现.onDelete
功能。如果仍然遇到问题,请检查数据源是否正确更新,并确保每个元素都是Identifiable
的。
领取专属 10元无门槛券
手把手带您无忧上云