Swiftui 如何使用ForEach从数组创建文本字段?
我想从字段数组构造一个表单Swiftui 如何使用ForEach从数组创建文本字段?,swiftui,Swiftui,我想从字段数组构造一个表单 class Field : Identifiable { let id = UUID() var label : String var value : String init(label: String, value: String) { self.label = label self.value = value } } 我试图在视图中使用ForEach迭代器 struct ContentVi
class Field : Identifiable {
let id = UUID()
var label : String
var value : String
init(label: String, value: String) {
self.label = label
self.value = value
}
}
我试图在视图中使用ForEach
迭代器
struct ContentView: View {
@EnvironmentObject var app: App
var body: some View {
Form {
ForEach(app.fields) { field in
HStack {
Button(action: { self.app.update(label: field.label) } ) {Text(field.label)}
TextField("0", text: field.value) // error
}
}
}
}
}
此代码导致错误消息无法将类型为“String”的值转换为预期的参数类型“Binding”
,我试图将字段.值
传递到文本字段()
我无法找到一种方法来创建一个绑定
以传递到TextField()
我可以通过显式调用
TextField(“0”,text:self.$app.fields[1].value)
来获得想要的行为,但我希望能够使用ForEach
来实现这一点,这样我就可以从数组中构造一个通用表单。以下是这种情况的解决方案:
ForEach(Array(app.fields.enumerated()), id: \.1.id) { i, field in
HStack {
Button(action: { self.app.update(label: field.label) } ) {Text(field.label)}
TextField("0", text: self.$app.fields[i].value)
}
}
以下是这种情况的解决方案:
ForEach(Array(app.fields.enumerated()), id: \.1.id) { i, field in
HStack {
Button(action: { self.app.update(label: field.label) } ) {Text(field.label)}
TextField("0", text: self.$app.fields[i].value)
}
}
公认的答案看起来是一个很好的通用解决方案。对于特定情况,可以通过为与数组中的位置相对应的每个
字段设置整数id
来解决
class Field : Identifiable, CustomStringConvertible {
let id : Int
var label : String
var value : String
...
然后该id
可用于TextField
参数:
struct ContentView: View {
@EnvironmentObject var app: App
var body: some View {
Form {
ForEach(app.fields) { field in
HStack {
Button(action: { self.app.update(label: field.label) } ) {Text(field.label)}
TextField("0", text: self.$app.fields[field.id].value)
}
}
}
}
}
公认的答案看起来是一个很好的通用解决方案。对于特定情况,可以通过为与数组中的位置相对应的每个字段设置整数id
来解决
class Field : Identifiable, CustomStringConvertible {
let id : Int
var label : String
var value : String
...
然后该id
可用于TextField
参数:
struct ContentView: View {
@EnvironmentObject var app: App
var body: some View {
Form {
ForEach(app.fields) { field in
HStack {
Button(action: { self.app.update(label: field.label) } ) {Text(field.label)}
TextField("0", text: self.$app.fields[field.id].value)
}
}
}
}
}
谢谢@Asperi。这达到了我想要的。对于我的具体情况,如果我为字段设置一个显式id,我可以使问题变得简单一点,我将其作为一个单独的答案发布感谢@Asperi。这达到了我想要的。对于我的具体情况,如果我为字段设置一个显式id,我可以将其作为一个单独的答案发布,那么问题会变得简单一些