我试图让一个选择器列出所有类型为
以下是受影响的代码:
Course
的项目,当用户添加新的Assignment
到托管对象上下文时,让用户选择适当的课程。当用户点击选择器视图中的一行时,选择器的选择绑定(courseIndex
)不会更新。我不确定如何解决这个问题,也不知道是什么原因导致的。希望能得到任何帮助!以下是受影响的代码:
struct NewAssignmentView: View {
@Environment(\.presentationMode) var presentationMode
@Environment(\.managedObjectContext) var context
@FetchRequest(entity: Course.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Course.name, ascending: true)]) var courses: FetchedResults<Course>
@State var name = ""
@State var hasDueDate = false
@State var dueDate = Date()
@State var courseIndex = 0
var body: some View {
NavigationView {
Form {
TextField("Assignment Name", text: $name)
Section {
Picker(selection: $courseIndex, label:
HStack {
Text("Course: ")
Spacer()
Text(self.courses[self.courseIndex].name ?? "").foregroundColor(self.courses[self.courseIndex].color).bold()
})
{
ForEach(self.courses, id: \.self) { course in
Text("\(course.name ?? "")").foregroundColor(course.color).tag(course)
}
}
}
Section {
Toggle(isOn: $hasDueDate.animation()) {
Text("Due Date")
}
if hasDueDate {
DatePicker(selection: $dueDate, displayedComponents: .date, label: { Text("Set Date:") })
}
}
}
[...]
.tag(option)
不能正常工作似乎很荒谬,但SwiftUI的工作方式却很神秘。 - stef.tag(option as String?)
更加简单直接。 - soundflixText(object.name).tag(object ?? nil)
即可。虽然不是很合理,但却有效。经过数小时的查找错误后得到了这个方法。 - Stefano Mtangoo