嵌套数组上的Swift onDelete

时间:2020-04-19 17:50:24

标签: swift swiftui

我有以下代码:

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作为自己的组件,而所有内容都放在一个结构中并且可以正常工作。自己的组件将有助于减少将来的代码冗余。

1 个答案:

答案 0 :(得分:2)

List {
    Section{
        ForEach(self.idArray, id: \.self){ id in
            Text(id)
        }.onDelete(perform: deleteItem)
    }
}