Буду признателен за практический совет, как решить эту проблему, потому что я полностью потерян.
У меня есть Contentview, представляющий задачу для пользователя, и три кнопки с вариантами ответа. Выбрав любой из вариантов, пользователь получает немедленный ответ, будь то правильный или неправильный ответ, и сразу же ставится новая задача. Кроме того, есть три счетчика, которые подсчитывают общее количество отвеченных задач за сеанс и соответственно количество правильных и неправильных ответов за сеанс.
Также у меня есть переключатель, который отвечает за исправление одного из условий для следующего Задачи.
Проблема в том, что, когда я нажимаю этот переключатель, он принимает новое значение, но он отражается в новой задаче только после того, как пользователь ответит на старую задачу. Проще говоря, это работает только со следующей задачей, хотя я хотел бы, чтобы представление обновлялось до новой задачи с этим фиксированным условием, и задача, представленная перед переключением, не считалась бы ответом.
ContentView. swift
import SwiftUI
import Combine
struct ContentView: View {
@EnvironmentObject var myVM: MyViewModel
var body: some View {
VStack (spacing: 5) {
TitleView()
Spacer()
CountersAndToggleView()
MainTaskView(numberOfPlayersInText: self.myVM.multiplayer, figureOne: self.myVM.figureOne, figureTwo: self.myVM.figureTwo)
AnswerOptionsButtonsRow(option1: self.myVM.answerOpt_1, option2: self.myVM.answerOpt_2, option3: self.my.answerOpt_3, correctAnswer: self.my.correctAnswer)
}
}
CountersAndToggleView.swift
import SwiftUI
import Combine
struct CountersAndToggleView: View {
@EnvironmentObject var myVM: MyViewModel
var body: some View {
HStack {
VStack {
CounterView(counter: myVM.masterCounter, progressIndicatorColor: .gray, backGroundColor: .white)
HStack {
CounterView(counter: myVM.correctCounter, progressIndicatorColor: .green, backGroundColor: .white)
CounterView(counter: myVM.wrongCounter, progressIndicatorColor: .red, backGroundColor: .white)
}
}
Spacer()
VStack {
Text("Fix multiplayer")
.font(.system(size: 15, design: .rounded))
VStack {
Toggle("Multiplyer", isOn: $myVM.multiplayerFixed)
.labelsHidden()
}
}
}
.padding(.horizontal, 45)
}
myViewModel.swift
import SwiftUI
import Combine
final class MyViewModel: ObservableObject {
@Published var multiplayer: Int = 1
@Published var figureOne: String = ""
@Published var figureTwo: String = ""
@Published var masterCounter = 0
@Published var correctCounter = 0
@Published var wrongCounter = 0
@Published var multiplayerFixed: Bool = False
init() {
self.generateFigures()
self.randomMultiplayer()
}
.... other functions
}
I хотелось бы, чтобы после исправления multiplayerFixed в CountersAndToggleView mainTaskView в ContentView полностью обновлялся, предполагая, что поколения новых фигур и значение многопользовательского режима будут фиксированными.
Как я уже писал, в действительности это происходит только после того, как пользователь ответит на предыдущий Задание и кнопка pu sh.
Не могли бы вы сообщить, что я делаю неправильно? и что надо менять?
Заранее спасибо.