From ff20ca6b279fc42c356c9e002eabd301ee935185 Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 24 Aug 2025 20:41:59 +0200 Subject: [PATCH] refactor: rename ViewModel to QuizViewModel --- .../{ViewModel.swift => QuizViewModel.swift} | 2 +- QuizApp/Views/EstimationQuestionView.swift | 2 +- QuizApp/Views/QuizView.swift | 112 +++++++++--------- 3 files changed, 58 insertions(+), 58 deletions(-) rename QuizApp/ViewModels/{ViewModel.swift => QuizViewModel.swift} (98%) diff --git a/QuizApp/ViewModels/ViewModel.swift b/QuizApp/ViewModels/QuizViewModel.swift similarity index 98% rename from QuizApp/ViewModels/ViewModel.swift rename to QuizApp/ViewModels/QuizViewModel.swift index fd2d25a..562b422 100644 --- a/QuizApp/ViewModels/ViewModel.swift +++ b/QuizApp/ViewModels/QuizViewModel.swift @@ -7,7 +7,7 @@ import Foundation -class ViewModel: ObservableObject { +class QuizViewModel: ObservableObject { @Published var questions: [QuizQuestion] = [] @Published var selectedCategory: String? = nil diff --git a/QuizApp/Views/EstimationQuestionView.swift b/QuizApp/Views/EstimationQuestionView.swift index 8ea96d0..42b9a30 100644 --- a/QuizApp/Views/EstimationQuestionView.swift +++ b/QuizApp/Views/EstimationQuestionView.swift @@ -12,7 +12,7 @@ struct EstimationQuestionView: View { let maxValue: Double let correctValue: Double let unit: String - let viewModel: ViewModel + let viewModel: QuizViewModel @Binding var value: Double @Binding var submitted: Bool diff --git a/QuizApp/Views/QuizView.swift b/QuizApp/Views/QuizView.swift index 7386d22..f9948a8 100644 --- a/QuizApp/Views/QuizView.swift +++ b/QuizApp/Views/QuizView.swift @@ -10,7 +10,7 @@ import AudioToolbox struct QuizView: View { - @StateObject var viewModel = ViewModel() + @StateObject var quizViewModel = QuizViewModel() @AppStorage("globalScore") var score: Int = 0 @Environment(\.dismiss) var dismiss @@ -19,29 +19,29 @@ struct QuizView: View { var body: some View { VStack { - if viewModel.isQuizFinished { + if quizViewModel.isQuizFinished { QuizFinishedView( - score: viewModel.score, - total: viewModel.questions.count, - isNewHighscore: viewModel.isNewHighscore, + score: quizViewModel.score, + total: quizViewModel.questions.count, + isNewHighscore: quizViewModel.isNewHighscore, onPlayAgain: { restartQuiz() }, onBackToCategories: { dismiss() } ) .onAppear { AudioServicesPlaySystemSound(1322) - score += viewModel.score + score += quizViewModel.score // Highscore prüfen/setzen - viewModel.isNewHighscore = viewModel.updateHighscoreIfNeeded() + quizViewModel.isNewHighscore = quizViewModel.updateHighscoreIfNeeded() } .onDisappear { - viewModel.isQuizFinished = false + quizViewModel.isQuizFinished = false } - } else if let frage = viewModel.currentQuestion { + } else if let frage = quizViewModel.currentQuestion { QuizHeader( - score: viewModel.score, - currentIndex: viewModel.currentQuestionIndex, - total: viewModel.questions.count, + score: quizViewModel.score, + currentIndex: quizViewModel.currentQuestionIndex, + total: quizViewModel.questions.count, colorForStep: { idx in colorForAnswer(at: idx) } ) @@ -56,29 +56,29 @@ struct QuizView: View { let correctV = frage.correctValue { // Estimation EstimationQuestionView( - questionID: viewModel.currentQuestionIndex, // <- neu + questionID: quizViewModel.currentQuestionIndex, // <- neu minValue: minV, maxValue: maxV, correctValue: correctV, unit: frage.unit ?? "", - viewModel: viewModel, - value: $viewModel.estimationValue, - submitted: $viewModel.estimationSubmitted, - gainedPoints: $viewModel.estimationPoints + viewModel: quizViewModel, + value: $quizViewModel.estimationValue, + submitted: $quizViewModel.estimationSubmitted, + gainedPoints: $quizViewModel.estimationPoints ) { gained in - viewModel.score += gained - viewModel.answeredCount += 1 - viewModel.selectedAnswers[viewModel.currentQuestionIndex] = 0 - viewModel.isAnswered = true + quizViewModel.score += gained + quizViewModel.answeredCount += 1 + quizViewModel.selectedAnswers[quizViewModel.currentQuestionIndex] = 0 + quizViewModel.isAnswered = true } - if viewModel.estimationSubmitted { + if quizViewModel.estimationSubmitted { Button { - viewModel.loadNextQuestion() - viewModel.estimationSubmitted = false - viewModel.isAnswered = false - viewModel.selectedAnswerIndex = nil - viewModel.estimationPoints = 0 + quizViewModel.loadNextQuestion() + quizViewModel.estimationSubmitted = false + quizViewModel.isAnswered = false + quizViewModel.selectedAnswerIndex = nil + quizViewModel.estimationPoints = 0 } label: { Text("Nächste Frage") .font(.headline) @@ -96,22 +96,22 @@ struct QuizView: View { MultipleChoiceQuestionView( answers: frage.answers, correctIndex: frage.correctAnswer, - selectedIndex: $viewModel.selectedAnswerIndex, - isAnswered: $viewModel.isAnswered, + selectedIndex: $quizViewModel.selectedAnswerIndex, + isAnswered: $quizViewModel.isAnswered, onAnswer: { index in print("Selected:", index) print("Correct:", frage.correctAnswer) - viewModel.incrementScore(selectedIndex: index) - viewModel.answeredCount += 1 - viewModel.selectedAnswers[viewModel.currentQuestionIndex] = index + quizViewModel.incrementScore(selectedIndex: index) + quizViewModel.answeredCount += 1 + quizViewModel.selectedAnswers[quizViewModel.currentQuestionIndex] = index }, buttonColor: { idx, correct in buttonColor(for: idx, correctIndex: correct) }, onNext: { - viewModel.loadNextQuestion() - viewModel.selectedAnswerIndex = nil - viewModel.isAnswered = false + quizViewModel.loadNextQuestion() + quizViewModel.selectedAnswerIndex = nil + quizViewModel.isAnswered = false } ) } @@ -120,20 +120,20 @@ struct QuizView: View { } } .onAppear { - viewModel.loadQuestions(questions: questions, for: category) + quizViewModel.loadQuestions(questions: questions, for: category) } - .navigationBarBackButtonHidden(!viewModel.isQuizFinished) + .navigationBarBackButtonHidden(!quizViewModel.isQuizFinished) .toolbar { - if !viewModel.isQuizFinished { + if !quizViewModel.isQuizFinished { ToolbarItem(placement: .navigationBarLeading) { Button("Abbrechen") { - viewModel.showExitAlert = true + quizViewModel.showExitAlert = true } .foregroundColor(.red) } } } - .alert("Quiz verlassen?", isPresented: $viewModel.showExitAlert) { + .alert("Quiz verlassen?", isPresented: $quizViewModel.showExitAlert) { Button("Quiz verlassen", role: .destructive) { dismiss() } @@ -145,11 +145,11 @@ struct QuizView: View { } private func buttonColor(for index: Int, correctIndex: Int) -> Color { - guard viewModel.isAnswered else { return .blue } + guard quizViewModel.isAnswered else { return .blue } if index == correctIndex { return .green - } else if index == viewModel.selectedAnswerIndex { + } else if index == quizViewModel.selectedAnswerIndex { return .red } else { return .gray @@ -157,34 +157,34 @@ struct QuizView: View { } private func restartQuiz() { - viewModel.currentQuestionIndex = 0 - viewModel.score = 0 - viewModel.isQuizFinished = false - viewModel.selectedAnswerIndex = nil - viewModel.isAnswered = false - viewModel.answeredCount = 0 - viewModel.selectedAnswers = Array(repeating: nil, count: viewModel.questions.count) + quizViewModel.currentQuestionIndex = 0 + quizViewModel.score = 0 + quizViewModel.isQuizFinished = false + quizViewModel.selectedAnswerIndex = nil + quizViewModel.isAnswered = false + quizViewModel.answeredCount = 0 + quizViewModel.selectedAnswers = Array(repeating: nil, count: quizViewModel.questions.count) } private func colorForAnswer(at index: Int) -> Color { - if index == viewModel.currentQuestionIndex, - viewModel.selectedAnswers[index] == nil { + if index == quizViewModel.currentQuestionIndex, + quizViewModel.selectedAnswers[index] == nil { return Color.blue // aktuelle Frage } - guard index < viewModel.selectedAnswers.count, - index < viewModel.questions.count else { + guard index < quizViewModel.selectedAnswers.count, + index < quizViewModel.questions.count else { return Color.gray.opacity(0.3) // unbeantwortet } // Prüfen ob die Frage beantwortet wurde - let question = viewModel.questions[index] + let question = quizViewModel.questions[index] if question.isEstimation { // Bei Estimation-Fragen: Grün wenn beantwortet - return viewModel.selectedAnswers[index] != nil ? .green : Color.gray.opacity(0.3) + return quizViewModel.selectedAnswers[index] != nil ? .green : Color.gray.opacity(0.3) } else { // Bei Multiple-Choice: Grün wenn richtig, rot wenn falsch - if let selected = viewModel.selectedAnswers[index] { + if let selected = quizViewModel.selectedAnswers[index] { let correct = question.correctAnswer return selected == correct ? .green : .red } else {