如何使用SwiftUI的onDelete()函数访问数组位置

时间:2019-11-14 16:16:32

标签: swift swiftui nsindexset

我正在尝试将UI删除与从CloudKit删除记录同步。 SwiftUI具有onDelete()功能,您可以将其添加到“列表”视图中,以滑动方式删除手势。我正在尝试使用它来访问已删除项目的数组中的位置,因此我可以在另一个函数中引用它来处理从Cloud Kit进行的删除。这是SwiftUI设置onDelete()的方式。

List {
    ForEach(recordsHandler.audioRecords) { record in
        Button(action: {
            //set the showModal variable to true to show DetailModalView
            self.showModal = true
            self.recordToPass = record
        }) {
            AudioRowView(audio: record)
     }
     .sheet(isPresented: self.$showModal) {
         PlaybackModalView(selectedRecord: self.recordToPass).environmentObject(self.recordsHandler)
     }
}
.onDelete(perform: delete)

下面是我的自定义行视图。确实并不会增加太多问题,但万一确实会增加。

struct AudioRowView: View {

    var audio: Audio

    var body: some View {
        HStack {
            Text(audio.title)
                .padding(5)
            Spacer()
            Text(audio.type)
                .padding(10)
                .background(Color.black)
                .foregroundColor(Color.white)
                .cornerRadius(20)
        }
        .frame(height: 50)
    }
}

下面是当前的删除功能,该功能按原样提供滑动手势并从列表视图中删除条目。如前所述,我现在试图解释该行在数组中的位置,因此我可以在另一个函数中调用它,然后继续从CloudKit中删除该条目。

func delete(at offsets: IndexSet) {
    recordsHandler.audioRecords.remove(atOffsets: offsets)
}

1 个答案:

答案 0 :(得分:0)

当您获得偏移量后,就可以一一告诉:

 func delete(at offsets: IndexSet) {
recordsHandler.audioRecords.remove(atOffsets: offsets)
    for row in offsets{
        print(row)}
}