SwiftUI:使用应用程序重新排序

SwiftUI:使用应用程序重新排序,swiftui,Swiftui,目标:多个文本视图在视觉上是分开的,就像{}部分提供的一样,同时还能够在编辑模式下重新排列列表中的项目。(我并不是100%地只使用部分,但我还没有找到一种用表单或列表进行视觉区分的方法。) 问题:应用程序在使用{}节重新排列时崩溃 错误消息:'无效更新:第2节中的行数无效。更新后现有节中包含的行数(1)必须等于更新前该节中包含的行数(0),加上或减去从该节插入或删除的行数(0插入,0删除),加上或减去移入或移出该节的行数(0移入,0移出).' 代码: struct SingleItem: Ide

目标:多个文本视图在视觉上是分开的,就像{}部分提供的一样,同时还能够在编辑模式下重新排列列表中的项目。(我并不是100%地只使用部分,但我还没有找到一种用表单或列表进行视觉区分的方法。)

问题:应用程序在使用{}节重新排列时崩溃

错误消息:'无效更新:第2节中的行数无效。更新后现有节中包含的行数(1)必须等于更新前该节中包含的行数(0),加上或减去从该节插入或删除的行数(0插入,0删除),加上或减去移入或移出该节的行数(0移入,0移出).'

代码:

struct SingleItem: Identifiable {
    let id = UUID()
    let item: String
}

class ItemGroup: ObservableObject{
    @Published var group = [SingleItem]()
}

struct ContentView: View {
    @ObservedObject var items = ItemGroup()
    @State private var editMode = EditMode.inactive
    
    var body: some View {
        NavigationView{
            Form {
                Button("Add Item"){
                    addButton()
                }
                ForEach(Array(items.group.enumerated()), id: \.element.id) { index, item in
                    Section{
                        Text(items.group[index].item)
                    }
                }
                .onMove(perform: onMove)
            }
            .navigationBarTitle("List")
            .navigationBarItems(trailing: EditButton())
            .environment(\.editMode, $editMode)
            
        }
    }

    func addButton() {
        let newItem = SingleItem(item: "Word - \(items.group.count)")
        self.items.group.append(newItem)
        
    }

    
    private func onMove(source: IndexSet, destination: Int) {
        items.group.move(fromOffsets: source, toOffset: destination)
    }
}

改为使用
.index
。在Xcode 12/iOS 14上测试正常,没有崩溃

    Form {
        ForEach(items.indices, id: \.self) { i in
            Section {
                Text(items[i].title)
            }
        }
        .onMove(perform: onMove)
    }

这似乎是可行的,但我把我的代码贴错了。我把它简化得太多了&显然解决了这些问题。我在上面更新了它。我需要将ForEach与数组一起使用,否则我的其他代码将与索引一起中断
ForEach(数组(items.group.enumerated()),id:\.element.id){index,节{Text(items.group[index.item]中的项)}