В настоящее время у меня возникают проблемы при изменении значения String с использованием TextField. Вот мой (упрощенный) код:
class GradeItem: ObservableObject {
@Published var name: String
@Published var scoredPoints: Double
@Published var totalPoints: Double
let isUserCreated: Bool
init(name: String, scoredPoints: Double, totalPoints: Double, isUserCreated: Bool) {
self.name = name
self.scoredPoints = scoredPoints
self.totalPoints = totalPoints
self.isUserCreated = isUserCreated
}
}
var courses: [Course] {
// initialization code...
}
struct GradeCalculatorView: View {
@State var selectedCourseIndex: Int = 0
var body: some View {
VStack {
// allows user to select a course:
ForEach(0 ..< courses.count) { i in
Button(action: {
self.selectedCourseIndex = i
}, label: {
Text(courses[i].name)
})
}
CourseView(course: courses[selectedCourseIndex])
}
}
}
struct CourseView: View {
@ObservedObject var course: Course // passed in from GradeCalculatorView
var body: some View {
VStack(alignment: .leading) {
Text(course.name)
ForEach(course.categories, id: \.name) { category in
GradeCategoryView(category: category)
}
}.padding(.leading).frame(alignment: .leading)
}
}
struct GradeCategoryView: View {
@ObservedObject var category: GradeCategory // passed in from CourseView
var body: some View {
VStack(alignment: HorizontalAlignment.leading) {
HStack {
Text(category.name)
Spacer()
}
ForEach(category.items, id:\.name) { item in
GradeItemRow(item: item)
}
}
}
}
struct GradeItemRow: View {
@ObservedObject var item: GradeItem // passed in from GradeCategoryView
var body: some View {
TextField("Item Name", text: $item.name)
}
}
Я не могу изменить имя объекта GradeItem с помощью TextField. Когда TextField редактируется, его текст временно изменяется. Однако, когда представление GradeItemRow перезагружается, оно отображает оригинальное имя объекта GradeItem, а не его обновленное имя.
Может ли кто-нибудь помочь?
Заранее спасибо
ОБНОВЛЕНИЕ: согласно вашим запросам, я добавил больше контекста в этот пример кода.
Я знаю, что это не работает, поскольку, когда я пытаюсь изменить имя GradeItem с помощью TextField, оно временно изменяется. Однако, когда я выбираю другой курс, а затем курс, на котором я был изначально, TextField отображает неизмененное значение имени.