У меня есть структурная модель, которая называется Вопросы, хранящиеся в DataRep, который также хранится в EnvironmentObject. Существует более 100 вопросов в 12 категориях.
struct Question: Hashable, Codable, Identifiable {
var id: Int
var questionText: String
var questionComment: String
var category: String
}
class DataRep: ObservableObject {
@Published var QuestionList : [Question] = QuestionListData
@Published var selectedCategory = "all"
}
В пользовательском интерфейсе я поместил 12 кнопок сверху и просмотр списка вниз, чтобы вывести список вопросов в этой категории.
Когда пользователь нажимает кнопку в новой категории я обновляю параметр selectedCategory
и фильтрую объект списка основных вопросов для выбора соответствующих вопросов.
struct QuestionList: View {
@EnvironmentObject var datarep: DataRep
var body: some View {
NavigationView{
Form {
ForEach(self.filterQuestions(datarep.QuestionList)) { question in
HStack{
QuestionView (question: question)
}
}
}//List
.navigationBarTitle(self.datarep.selectedCategory )
.labelsHidden()
.listStyle(GroupedListStyle())
}
}
func filterQuestions(_ activeList : [Question]) -> [Question]
{
if self.datarep.selectedCategory != "all" {
return activeList.filter{ $0.category.contains(self.datarep.selectedCategory) }
}
return activeList
}
}
Однако у меня возникают проблемы с методом фильтра, поскольку он генерирует новый массив каждый раз категория меняется. Я не знаю, как создать привязку.
есть предложения?
С уважением, M