I don't see how this is not a bug. Delete works fine with Text but not TextField. Fails with a Index out of Range exception.
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")
}))
}
}
}
Tried this new code and I can now delete but have an editing issue.
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")
}))
}
}
}