我有以下代码:
struct FirstView: View {
@State var idArray: Array<String> = ["a", "b", "c"]
var body: some View {
SecondView(idArray: $idArray)
}
}
struct SecondView: View {
@Binding var idArray:Array<String>
var body: some View {
List(){
Section{
ForEach(0..<self. idArray.count, id: \.self){id in
Text(self.idArray[id])
}.onDelete(perform: deleteItem)
}
}
}
func deleteItem(at offsets: IndexSet) {
self.idArray.remove(atOffsets: offsets)
}
}
问题: 执行删除时,它不会删除正确的元素,而是最后一个元素。
我认为@Binding
是这里的问题,就像以前一样,我没有将List作为自己的组件,而所有内容都放在一个结构中并且可以正常工作。自己的组件将有助于减少将来的代码冗余。
答案 0 :(得分:2)
List {
Section{
ForEach(self.idArray, id: \.self){ id in
Text(id)
}.onDelete(perform: deleteItem)
}
}