feat: added "Nächste Frage" button
This commit is contained in:
@@ -16,7 +16,7 @@ struct ContentView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
if let frage = viewModel.topics.first {
|
if let frage = viewModel.currentQuestion {
|
||||||
Text(frage.question)
|
Text(frage.question)
|
||||||
.font(.title)
|
.font(.title)
|
||||||
.multilineTextAlignment(.center)
|
.multilineTextAlignment(.center)
|
||||||
@@ -46,9 +46,18 @@ struct ContentView: View {
|
|||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
if isAnswered {
|
if isAnswered {
|
||||||
Button("Nächste Frage") {
|
Button(action: {
|
||||||
|
viewModel.loadNextQuestion()
|
||||||
selectedAnswerIndex = nil
|
selectedAnswerIndex = nil
|
||||||
isAnswered = false
|
isAnswered = false
|
||||||
|
}) {
|
||||||
|
Text("Nächste Frage")
|
||||||
|
.font(.headline)
|
||||||
|
.padding(.vertical, 10)
|
||||||
|
.padding(.horizontal, 30)
|
||||||
|
.background(Color.blue)
|
||||||
|
.foregroundColor(.white)
|
||||||
|
.cornerRadius(10)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct Topic: Decodable, Hashable {
|
struct QuizQuestion: Decodable, Hashable {
|
||||||
|
|
||||||
let question: String
|
let question: String
|
||||||
let answers: [String]
|
let answers: [String]
|
||||||
|
|||||||
@@ -9,22 +9,34 @@ import Foundation
|
|||||||
|
|
||||||
class ViewModel: ObservableObject {
|
class ViewModel: ObservableObject {
|
||||||
|
|
||||||
let topics: [Topic]
|
@Published var questions: [QuizQuestion] = []
|
||||||
|
|
||||||
@Published var currentQuestionIndex: Int = 0
|
@Published var currentQuestionIndex: Int = 0
|
||||||
|
|
||||||
|
var currentQuestion: QuizQuestion? {
|
||||||
|
guard currentQuestionIndex < questions.count else { return nil }
|
||||||
|
return questions[currentQuestionIndex]
|
||||||
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
guard let url = Bundle.main.url(forResource: "data", withExtension: "json") else {
|
guard let url = Bundle.main.url(forResource: "data", withExtension: "json") else {
|
||||||
topics = []
|
questions = []
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let data = try Data(contentsOf: url)
|
let data = try Data(contentsOf: url)
|
||||||
topics = try JSONDecoder().decode([Topic].self, from: data)
|
questions = try JSONDecoder().decode([QuizQuestion].self, from: data)
|
||||||
} catch {
|
} catch {
|
||||||
print("Fehler beim Laden des Inhalts: \(error)")
|
print("Fehler beim Laden des Inhalts: \(error)")
|
||||||
topics = []
|
questions = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadNextQuestion() {
|
||||||
|
if currentQuestionIndex + 1 < questions.count {
|
||||||
|
currentQuestionIndex += 1
|
||||||
|
} else {
|
||||||
|
currentQuestionIndex = 0 // oder Quiz-Ende behandeln
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,47 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"question": "Was ist die Hauptstadt von Deutschland?",
|
"question": "Was ist die Hauptstadt von Deutschland?",
|
||||||
"answers": ["Rom", "Berlin", "Paris"],
|
"answers": ["Berlin", "Wien", "Hamburg"],
|
||||||
|
"correctAnswer": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Italien?",
|
||||||
|
"answers": ["Rom", "Mailand", "Neapel"],
|
||||||
|
"correctAnswer": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Spanien?",
|
||||||
|
"answers": ["Barcelona", "Madrid", "Valencia"],
|
||||||
"correctAnswer": 1
|
"correctAnswer": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Österreich?",
|
||||||
|
"answers": ["Graz", "Salzburg", "Wien"],
|
||||||
|
"correctAnswer": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt der Schweiz?",
|
||||||
|
"answers": ["Zürich", "Bern", "Genf"],
|
||||||
|
"correctAnswer": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Portugal?",
|
||||||
|
"answers": ["Lissabon", "Porto", "Faro"],
|
||||||
|
"correctAnswer": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Belgien?",
|
||||||
|
"answers": ["Brüssel", "Antwerpen", "Brügge"],
|
||||||
|
"correctAnswer": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Niederlande?",
|
||||||
|
"answers": ["Rotterdam", "Amsterdam", "Den Haag"],
|
||||||
|
"correctAnswer": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"question": "Was ist die Hauptstadt von Polen?",
|
||||||
|
"answers": ["Warschau", "Krakau", "Danzig"],
|
||||||
|
"correctAnswer": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user