如何使用swiftui从嵌套数组中删除项

mznpcxlj  于 2023-06-28  发布在  Swift
关注(0)|答案(1)|浏览(130)

假设我有以下状态项,并且我想使用onDelete删除嵌套数据数组中的该项。我可以手动输入索引

.onDelete { indexSet in
            items**[1]**.data.remove(atOffsets: indexSet) }

它适用于那个特定的数组,但是我应该用什么来代替硬连接索引[1]。有没有更好的办法?

struct Item: Codable, Identifiable, Hashable {
    var id: Int
    var data: [Datr]
}

struct Datr: Codable, Identifiable, Hashable {
    var id: Int
    var number: String
    
    enum CodingKeys: String, CodingKey {
        case id
        case number = "number"
    }
}

struct ContentView: View {
    
    @State fileprivate var items = [
        Item(id: 1, data: [Datr(id: 1, number: "one"), Datr(id: 2, number: "two")]),
        Item(id: 2, data: [Datr(id: 1, number: "three"), Datr(id: 2, number: "four")])
        ]
             
  var body: some View {
    List {
        ForEach(items) {
            item in
            ForEach(item.data) { item2 in
                Text(item2.number)
            }
        }.onDelete { indexSet in
            items[1].data.remove(atOffsets: indexSet)
      }
    }
  }
}

Thanks:)
我想也许有办法从indexSet中获取索引,但找不到任何东西?

3phpmpom

3phpmpom1#

@loremipsum发布了你可以循环通过IndexSet作为数组并获取项目的索引。因此,在删除嵌套在数组中的项的情况下,可以使用以下命令:

List {
        ForEach(items) {
            item in
            ForEach(item.data) { item2 in
                Text(item2.number)
            }
        }.onDelete { indexSet in
            for n in indexSet {
                items[n].data.remove(atOffsets: indexSet)
            }
            
      }

相关问题