Swift 带有文本字段的ForEach onDelete错误
我不明白这怎么不是一个bug。Delete可以处理文本,但不能处理TextField。失败,索引超出范围异常Swift 带有文本字段的ForEach onDelete错误,swift,foreach,swiftui,Swift,Foreach,Swiftui,我不明白这怎么不是一个bug。Delete可以处理文本,但不能处理TextField。失败,索引超出范围异常 import SwiftUI struct ContentView: View { @State private var messages = ["one", "two"] var body: some View { NavigationView { List {
import SwiftUI
struct ContentView: View {
@State private var messages = ["one", "two"]
var body: some View {
NavigationView {
List {
ForEach (messages.indices, id: \.self) { index in
// Text($messages[index]) // Works
TextField("", text: $messages[index]) // Bug
}.onDelete(perform: { indexSet in
messages.remove(atOffsets: indexSet)
})
}
.navigationTitle(Text("Messages"))
.navigationBarItems(trailing:
Button(action: {
messages.append("another")
}, label: {
Image(systemName: "plus.circle.fill")
}))
}
}
}
我尝试了这段新代码,现在可以删除,但有编辑问题
struct ContentView: View {
@State private var messages = ["one","two"]
var body: some View {
NavigationView {
List {
ForEach (Array(messages.enumerated()), id: \.element) { index, item in
TextField("", text: Binding(
get: { self.messages[index] },
set: { self.messages[index] = $0 }))
}.onDelete(perform: { indexSet in
messages.remove(atOffsets: indexSet)
})
}
.navigationTitle(Text("Messages"))
.navigationBarItems(trailing:
Button(action: {
messages.append("another")
}, label: {
Image(systemName: "plus.circle.fill")
}))
}
}
}
这是否回答了您的问题?您的id必须是唯一的。\。自我不是唯一的。对于exmaple,当您删除数组的第二个元素时,第三个元素变为2。@mahan这是真的,但是,如果这是问题的话,它将失败,只有文本视图是正确的?绑定修复程序似乎允许正确删除文本字段,我无法再正确编辑文本字段字符串。这是否回答了您的问题?您的id必须唯一。\。自我不是唯一的。对于exmaple,当您删除数组的第二个元素时,第三个元素变为2。@mahan这是真的,但是,如果这是一个问题,它将失败,只有文本视图正确吗?绑定修复似乎允许正确删除文本字段,但是,我无法再正确编辑文本字段字符串