我正在竭尽全力试图弄清楚如何使选择器显示已经存储的CoreData值。我希望它显示在选择器的右侧,就像用户刚刚选择它一样。我尝试在选择器之前添加IntoIterator
来设置初始值,但是不会建立。我也尝试在self.updatedItemAttribute = self.editItem.attribute ?? ""
中定义它(例如@State
),但这也没有建立。如果我在选择器之前添加一个@State var updatedItemAttribute: String = self.editItem.attribute
,它将设置该值,但是我不想拥有一个带有该值的TextField
,只是为了设置它。关于如何在选择器之前将TextField
设置为updatedItemAttribute
的任何想法?谢谢。
editItem.attribute
答案 0 :(得分:3)
您必须在init中进行此操作,如下所示
struct EditItemView: View {
@Environment(\.managedObjectContext) var moc
@Environment(\.presentationMode) var presentationMode
@ObservedObject var editItem: Item
@State private var updatedItemName: String
@State private var updatedItemAttribute: String
init(editItem item: Item) { // << updated here
self.editItem = item
self._updatedItemName = State<String>(initialValue: item.name ?? "")
self._updatedItemAttribute = State<String>(initialValue: item.attribute ?? "")
}
let attributes = ["Red", "Purple", "Yellow", "Gold"]
var body: some View {
NavigationView {
Form {
Section {
TextField("Name of item", text: $updatedItemName)
Picker("Test attribute", selection: self.$updatedItemAttribute) {
ForEach(attributes, id: \.self) {
Text($0)
}
}
}
}
}
}
}