Reputation: 33
I've been browsing for several hours to find the right answer but seems like I can't apply it properly to my own code.
Most of the time, the answers given on stackoverflow for this problem are with Strings & Int examples and I'm struggling with the Question Type.
I'm just starting on Xcode & Swift and managed so far to make a Quiz App that works perfectly fine.
I've used shuffle but I can't find the rest of the code not to repeat questions previously asked.
What I exactly want to do : I have 7 questions for now, I want those to be asked ONCE in different orders anytime someone wants to play the Quiz.
I've got two classes in 2 other swift files.
This is my QuestionBank type with 7 questions all completed properly:
class QuestionBank {
var list = [Question]()
init () {
list.append(Question(questionNumber: 0, image: "a", questionText: "a", choiceA: "a", choiceB: "a", choiceC: "a", choiceD: "a", answer: 1))
And this is my Question class :
}
class Question {
let number : Int
let questionImage: String
let question: String
let optionA: String
let optionB: String
let optionC: String
let optionD: String
let correctAnswer: Int
init(questionNumber: Int, image: String, questionText: String, choiceA: String, choiceB: String, choiceC: String, choiceD: String, answer: Int) {
number = questionNumber
questionImage = image
question = questionText
optionA = choiceA
optionB = choiceB
optionC = choiceC
optionD = choiceD
correctAnswer = answer
}
And the func to updateQuestion where I believe sh*t is supposed to happen but doesn't.
func updateQuestion() {
if questionNumber <= allQuestions.list.count - 1 {
imageView.image = UIImage(named:(allQuestions.list[questionNumber].questionImage))
QuestionLabel.text = allQuestions.list[questionNumber].question
optionA.setTitle(allQuestions.list[questionNumber].optionA, for: UIControl.State .normal)
optionB.setTitle(allQuestions.list[questionNumber].optionB, for: UIControl.State .normal)
optionC.setTitle(allQuestions.list[questionNumber].optionC, for: UIControl.State .normal)
optionD.setTitle(allQuestions.list[questionNumber].optionD, for: UIControl.State .normal)
selectedAnswer = allQuestions.list[questionNumber].correctAnswer
questionNumber += 1
allQuestions.list.shuffle()
Upvotes: 3
Views: 594
Reputation: 16341
You seem to be shuffling the list
every time you call updateQuestion
which seems to be the issue here. You are only supposed to call the shuffle
once and iterate through the questions one by one. To fix the issue remove the shuffle from updateQuestion
and add it in viewDidLoad
or just call it once in updateQuestion
based on a condition like this:
if questionNumber == 1 {
allQuestions.list.shuffle()
}
Upvotes: 1