Swift 5.0 Генерация подмножества массива объектов - PullRequest
0 голосов
/ 10 января 2020

У меня есть структурная модель, которая называется Вопросы, хранящиеся в 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

1 Ответ

0 голосов
/ 11 января 2020

Предполагая, что QuestionView примет связывание (для изменения вопроса), так как

struct QuestionView: View {
    @Binding var question: Question
    ...

оно может быть связано (даже после фильтрации) через основной контейнер, как показано ниже

ForEach(self.filterQuestions(datarep.QuestionList)) { question in
    HStack{
         QuestionView (question: 
             self.$datarep.QuestionList[self.datarep.QuestionList.firstIndex(of: question)!])
    }
}
...