#ios #swift #core-data #swiftui
#iOS #swift #основные данные #swiftui
Вопрос:
Я использую SwiftUI с Coredata для отображения элементов данных отношения «один ко многим».
Пример:
У одного Group
их много Book
.
У меня есть два представления, GroupView
имеет много GroupRowView
с.
struct GroupView: View {
var groups: FetchedResults<Group>
var body: some View {
ScrollView(.horizontal) {
HStack(alignment: .center, spacing: 32, content: {
ForEach(contractGroups) { group in
HStack {
GroupRowView(group: group)
Text(String(group.books?.count ?? 0)) // display correct
.foregroundColor(Color.red)
}
}
})
}
}
}
и здесь находится GroupRowView:
struct GroupRowView: View {
var group: Group
var body: some View {
ZStack {
Color(.white)
VStack {
Text(group.name!)
.foregroundColor(Color.white)
.font(.system(size: 17, weight: .bold, design: .default))
Text(String(group.books?.count ?? 0)) //display wrong
.foregroundColor(Color.white)
}
}.frame(width: 120, height: 100, alignment: .center)
}
}
Каждый раз, когда books
обновлялось, количество книг отображалось правильно в GroupView
, но не в GroupRowView
.
group
В forEach
том FetchedResults<ContractGroup>.Element
, что причина не такая, как var group: ContractGroup
в GroupRowView
?
Как внести изменения group.books
в GroupRowView
получение изменений?
Спасибо!
Ответ №1:
Вам нужно явно наблюдать group
в строке, например
struct GroupRowView: View {
@ObservedObject var group: Group
// ... other code