这是我的Manager类的基本内容,它可以调用以检索要放入TypeModel中的数据。
class Manager: ObservableObject {
@Published var Type: TypeModel?
func GetType(_ id: String){
**Makes the network call to populate the TypeModel**
}
}
这是具有DataModel的TypeModel。
struct TypeModel: Codable {
let id: String
let name: String
var data: [DataModel] = []
}
这是应该在我的视图内的TextField中显示的数据模型。
struct DataModel : Codable, Identifiable {
let id: UUID
let text: String
let placeholder: String?
}
这是将使用管理器类进行调用以获取TypeModel数据的视图。我在此视图之前从一个视图传入管理器,因此它已被初始化。我还从该视图之前的视图中传入了Id属性。
struct ItemView: View {
@ObservedObject var manager: Manager
@State var answers = [UUID:String]()
let Id : String
var body: some View {
VStack {
if let type = manager.Type{
ForEach(type.data){ d in
Text(d.text)
.bold()
.frame(maxWidth: .infinity, alignment: .leading)
TextField(d.placeholder ?? "", text: $answers[d.id])
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
Spacer()
}.padding()
.onAppear{
manager.GetType(Id)
}
}
}
关于这个设置,我有两个问题。
我正在尝试在视图通过type.data时填充答案字典,但是我无法在视图的正文部分中修改属性。我需要使用返回的Datamodel ID填充字典,该值将是在文本字段中键入的值。这使我想到了第二个问题。
我试图将答案词典的值绑定到在文本字段中输入的内容,但在此行上( TextField(d.placeholder ??“”,文本:$ answers [ d.id]) )我收到此错误( 无法将类型'Binding
如果他们是我可以做的更好的方法,请让我知道我仍然对swiftUI陌生。