¿Cómo me aseguro de que se muestren las respuestas correctas dentro de una aplicación de testing?

Estoy desarrollando una aplicación de testing donde tengo una serie constante de preguntas y respuestas. Las opciones de respuesta están asociadas con las preguntas al tener el mismo índice que su pregunta correspondiente (por ejemplo, las primeras opciones de respuesta en el set de respuestas van con el primer índice del set de preguntas, etc.). Sin embargo, estoy aleatorizando la selección de la pregunta que se hace desde la matriz de preguntas, pero las respuestas correspondientes no aparecen con la pregunta correcta que se muestra. ¿Cuál es la mejor forma de elegir las respuestas correctas con la pregunta que se selecciona y muestra random? Además, ¿cómo impediría que una pregunta que ya ha sido respondida no se seleccionara random nuevamente hasta que la testing haya fallado y se haya reiniciado? Gracias.

Aquí está mi código:

import UIKit class ViewController:UIViewController { //random question generation function func randomQuestion() { index = Int(arc4random_uniform(UInt32(questions.count))) questionLabel.text = questions[index] } //costants let questions = ["Who is Thor's half brother?", "What is the name of Thor's hammer?"] var answers = [["Atum", "Loki", "Red Norvell", "Kevin Masterson"], ["Mjolinr", "Uru", "Stormbreaker", "Odin's Staff"]] //variables var currentQuestion = 0 var rightAnswerBox:UInt32 = 0 var index = 0 //Question Label @IBOutlet weak var questionLabel: UILabel! //Answer Button @IBAction func buttonAction(_ sender: AnyObject) { if (sender.tag == Int(rightAnswerBox)) { print ("Correct!") } else { wrongSeg() print ("Wrong!") } if (currentQuestion != questions.count) { newQuestion() } } override func viewDidAppear(_ animated: Bool) { newQuestion() } //function that displays new question func newQuestion() { //countdown timer section randomQuestion() rightAnswerBox = arc4random_uniform(4)+1 //create a button var button:UIButton = UIButton() var x = 1 for index in 1...4 { //creat a button button = view.viewWithTag(index) as! UIButton if (index == Int(rightAnswerBox)) { button.setTitle(answers[currentQuestion][0], for: .normal) } else { button.setTitle(answers[currentQuestion][x], for: .normal) x += 1 } } currentQuestion += 1 randomImage() } 

Recomendaría utilizar una estructura de datos más adecuada.

Algo como:

 class Question { var id: Int var questionText: String var answers: [String] var answenetworking = false } 

A continuación, aleatoriza el set de preguntas. Realiza un seguimiento del índice en el que se encuentra y avanza en la matriz hasta que finalice.

Al final del ciclo, verifique qué preguntas no han sido respondidas, elimine las respuestas (o cree una nueva matriz) y repita el process.

Puede enumerar a través de la matriz

 var questions = [Question]() //populate the array for (index, question) in questions.enumerated() { //This returns the question as well as the current index } 

1. Haga una struct

Esto permite que se empackagen una pregunta y una matriz de respuestas, útil cuando se barajan más tarde.

 struct Question { var id: Int var questionText: String var answers: [String] } var example = Question(id: 1, questionText: "Foo?", answers:["1", "2", "3", "4"]) var id = example.id var questionText = example.questionText var answers = example.answers 

2. Ahora aleatoriza una matriz de Preguntas usando Fisher-Yates Shuffle

Enfriar porque O (n) time.

 var question1 = Question(id: 1, questionText: "Foo?", answers:["1", "2", "3", "4"]) var question2 = Question(id: 2, questionText: "Bar?", answers:["1", "2", "3", "4"]) var question3 = Question(id: 3, questionText: "Baz?", answers:["1", "2", "3", "4"]) var question4 = Question(id: 4, questionText: "What is after Baz?", answers:["1", "2", "3", "4"]) var questions = [question1, question2, question3, question4] for i in 0..<questions.count-2 { var rand = Int(arc4random_uniform(questions.count - i)) var copy = questions[i] questions[i] = questions[rand] questions[rand] = copy } print(questions) // shuffled