Проблема с вашей @State var faq: [FAQ]
строкой.Оболочка свойства @State
позволяет вашему представлению следить за изменениями в вашем массиве, но изменение свойства одного из элементов массива не считается изменением в массиве.
Вместо использования переменной состояния,вы, вероятно, хотите создать модель небольшого вида, например:
class ViewModel: ObservableObject {
@Published var faqs: [FAQ] = [
FAQ(question: "What is the fastest animal on land?", answers: ["The cheetah"]),
FAQ(question: "What colours are in a rainbox?", answers: ["Red", "Orange", "Yellow", "Blue", "Indigo", "Violet"])
]
}
и обновить ваш ContentView:
struct ContentView: View {
@ObservedObject var model = ViewModel()
var body: some View {
List {
ForEach(model.faqs.indices) { index in
Section(header: Text(self.model.faqs[index].question)
.onTapGesture {
self.model.faqs[index].isExpanded.toggle()
}
) {
if self.model.faqs[index].isExpanded {
ForEach(self.model.faqs[index].answers, id: \.self) {
Text("• " + $0).font(.body)
}
}
}
}
}
}
}
Оболочка свойства @ObservedObject
в вашем ContentView
теперь следит заany меняет свой объект ViewModel
, и оболочка @Published
сообщает классу ViewModel
о том, что происходит с массивом, включая изменения его элементов.