SwiftUI:删除TextField()而不是Text()时索引超出范围

SwiftUI:删除TextField()而不是Text()时索引超出范围,swiftui,Swiftui,下面的代码在删除TextField()时抛出索引超出范围错误,但在删除Text()时不会抛出索引超出范围错误 以下是完整错误:致命错误:索引超出范围:文件Swift/ContiguousArrayBuffer.Swift,第444行 import SwiftUI struct Information: Identifiable { let id: UUID var title: String } struct ContentView: View { @State v

下面的代码在删除TextField()时抛出索引超出范围错误,但在删除Text()时不会抛出索引超出范围错误

以下是完整错误:致命错误:索引超出范围:文件Swift/ContiguousArrayBuffer.Swift,第444行

import SwiftUI

struct Information: Identifiable {
    let id: UUID
    var title: String
}

struct ContentView: View {

    @State var infoList = [
        Information(id: UUID(), title: "Word"),
        Information(id: UUID(), title: "Words"),
        Information(id: UUID(), title: "Wording"),
    ]


var body: some View {
    
    Form {
        ForEach(0..<infoList.count, id: \.self){ item in
            Section{
                
                
//                    Text(infoList[item].title) //<-- this doesn't throw error when deleted
                
                    TextField(infoList[item].title, text: $infoList[item].title)
            
            }
        }.onDelete(perform: deleteItem)
    }

}

    private func deleteItem(at indexSet: IndexSet) {
        self.infoList.remove(atOffsets: indexSet)
    }
}
导入快捷界面
结构信息:可识别{
let id:UUID
变量标题:字符串
}
结构ContentView:View{
@状态变量信息列表=[
信息(id:UUID(),标题:“Word”),
信息(id:UUID(),标题:“文字”),
信息(id:UUID(),标题:“措辞”),
]
var body:一些观点{
形式{
ForEach(0..是正确的。我只需要稍微调整一下,使其与可识别的兼容。最终代码如下:

import SwiftUI

struct Information: Identifiable {
let id: UUID
var title: String

}

struct ContentView: View {

@State var infoList = [
    Information(id: UUID(), title: "Word"),
    Information(id: UUID(), title: "Words"),
    Information(id: UUID(), title: "Wording"),
]




var body: some View {
    
    Form {
        ForEach(0..<infoList.count, id: \.self){ item in
            
            EditorView(container: self.$infoList, index: item, text: infoList[item].title)
                
            
        }.onDelete(perform: deleteItem)

      
    }

}

private func deleteItem(at indexSet: IndexSet) {
    
    
    
    self.infoList.remove(atOffsets: indexSet)
}
}


struct EditorView : View {
var container: Binding<[Information]>
var index: Int

@State var text: String

var body: some View {
    TextField("", text: self.$text, onCommit: {
        self.container.wrappedValue[self.index] = Information(id: UUID(), title: text)
    })
}
}
导入快捷界面
结构信息:可识别{
let id:UUID
变量标题:字符串
}
结构ContentView:View{
@状态变量信息列表=[
信息(id:UUID(),标题:“Word”),
信息(id:UUID(),标题:“文字”),
信息(id:UUID(),标题:“措辞”),
]
var body:一些观点{
形式{

ForEach(0..这是否回答了您的问题?也可能会有帮助。第一个链接似乎可以使用,但我在使其与可识别链接一起使用时遇到了问题。特别是要将索引传递给EditorView。