【发布时间】:2021-03-06 16:40:06
【问题描述】:
我目前在SwiftUI 中与Forms 合作。我正在实现一个 EditUser 视图,因此我正在尝试使用之前的输入预填充表单
我正在传递一个包含所有相关数据的 User Object,并使用 initializer 更新所有输入状态。
struct EditUserView: View {
let user: User?
@Binding var showEditUserView: Bool
@State private var gender: User.Gender = .notSet
@State private var firstName: String = ""
@State private var lastName: String = ""
init(for user: User?, show: Binding<Bool>) {
// First, update the Struct Properties with the given Values
self.user = user
self._showEditUserView = show
// Second, if a User was given, update all Inputs with the given Values
if let safeUser = user {
gender = safeDoctor.gender
firstName = safeDoctor.firstName
lastName = safeDoctor.lastName
}
}
// Some other Code
Picker(selection: $gender, label: Text("Gender")) {
ForEach(User.Gender.allCases, id: \.self) { gender in
if gender != .notSet { Text(gender.string).tag(gender) }
}
}
HStack {
TextField("FirstName", text: $firstName)
Divider()
TextField("LastName", text: $lastName)
}
在提供用户(非零)的同时创建 EditUserView 的新实例时,输入字段不会使用提供的值进行更新。
谁能找出这不起作用的原因?
感谢您的帮助。
【问题讨论】:
-
您确定您确实在提供要更新的值吗?老实说,您最好将
User设为一个可以直接绑定到您的 TextField 的 ObservableObject。我怀疑您的解包失败,firstName和lastName默认为空字符串,这是一个实际值,这就是您的文本字段显示的内容。你是否设置了断点来检查各个地方的值? -
为什么
safeUser变成safeDoctor?