If you would not mind defining a read-write computed property, you can write something like this:
extension Row {
		var textBody: String {
				get {
						switch self {
						case .text(let body):
								return body
						default:
								return ""
						}
				}
				mutating set {
						self = .text(newValue)
				}
		}
}
struct StuffView: View {
		@State var stuff: [Row] = [.text("foo"), .text("bar")]
		
		var body: some View {
				List {
						ForEach(stuff.indices) { idx in
								switch stuff[idx] {
								case .text(let body):
										HStack {
												TextField(
														"Row \(idx)",
														text: $stuff[idx].textBody //<-
												)
												
												Spacer()
												
												Text(body)
										}
								}
						}
				}
		}
}