Я создал класс ObservableObject с именем ActiveQuiz
с информацией, которую я хочу передать нескольким представлениям:
import Foundation
class ActiveQuiz: ObservableObject{
@Published var iterator = 0
@Published var questions = createQuiz()
}
В одном из представлений, которые я отображаю, текст, который при нажатии на кнопку увеличивает итератор который, в свою очередь, обновляет текст при переходе к следующей записи в массиве вопросов:
import SwiftUI
struct Question: View {
@ObservedObject var activeQuiz = ActiveQuiz()
var body: some View {
Text(self.activeQuiz.questions[self.activeQuiz.iterator].countryInfo.capital)
.font(.title)
.onTapGesture(perform: {
// increase iterator by 1 unless it's at the end, then put back to 0
self.activeQuiz.iterator = self.activeQuiz.iterator + 1 == self.activeQuiz.questions.count ? 0 : self.activeQuiz.iterator + 1
} )
}
}
В другом представлении у меня есть счетчик, который отображает, где находится итератор:
import SwiftUI
struct QuestionCounter: View {
@ObservedObject var activeQuiz = ActiveQuiz()
var body: some View {
Text(String(self.activeQuiz.iterator + 1) + "/" + String(self.activeQuiz.questions.count))
}
}
Текст из первого представления обновляется, как и ожидалось, но итератор из второго просмотра остается на начальном 1 / x.
Вопрос : Будучи новичком в Swift, я не понимаю, почему общее состояние ObservableObject
ActiveQuiz не обновляется во всех представлениях, которые его «наблюдают». Кроме того, будучи новичком в Swift, я прошу прощения, если я не включил какую-либо информацию, необходимую для ответа на вопрос, о котором я не знаю.