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