Существует, вероятно, лучший способ этого приложения без повторения кода, как я сделалQuiz App с массивом без повторяющихся вопросов
Я пытаюсь создать другой вопрос с, что делает его повторить из массива. Но каждый раз, когда действие NextQuestion нажимает несколько раз, он дает мне один и тот же вопрос несколько раз, потом переходит к следующему, или в другое время он только нажимает, а затем переходит к следующему. Я знаю, что это лучший код, но я все еще участвую.
import UIKit
class TestQuestionsVC: UIViewController {
@IBOutlet weak var SignImage: UIImageView!
@IBOutlet weak var AnswerBtn_A: MaterialButton!
@IBOutlet weak var AnswerBtn_B: MaterialButton!
@IBOutlet weak var AnswerBtn_C: MaterialButton!
@IBOutlet weak var AnswerBtn_D: MaterialButton!
var questionModel = QuestionModel()
var GuessQuestionNum = ""
var answer: String = ""
var btnLatter = ""
var previousNumber: UInt32? // used in randomNumber()
override func viewDidLoad() {
super.viewDidLoad()
for _ in 1...5 {
randomQuestion(queModel: questionModel)
}
}
func randomQuestion(queModel queModel:QuestionModel){
let questions = queModel.questions
let randomIndex = Int(arc4random_uniform(UInt32(questions.count)))
answer = "\(questions[randomIndex].answers[questions[randomIndex].correctAnswerIndex])"
SignImage.image = questions[randomIndex].question
AnswerBtn_A.setTitle("\(questions[randomIndex].answers[0])", forState: .Normal)
AnswerBtn_B.setTitle("\(questions[randomIndex].answers[1])", forState: .Normal)
AnswerBtn_C.setTitle("\(questions[randomIndex].answers[2])", forState: .Normal)
AnswerBtn_D.setTitle("\(questions[randomIndex].answers[3])", forState: .Normal)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func ActBtn_A(sender: AnyObject) {
GuessQuestionNum = (AnswerBtn_A.titleLabel?.text)!
if GuessQuestionNum == answer {
AnswerBtn_A.backgroundColor = GREEN_COLOR
} else {
AnswerBtn_A.backgroundColor = RED_COLOR
}
}
@IBAction func ActBtn_B(sender: AnyObject) {
GuessQuestionNum = (AnswerBtn_B.titleLabel?.text)!
if GuessQuestionNum == answer {
AnswerBtn_B.backgroundColor = GREEN_COLOR
} else {
AnswerBtn_B.backgroundColor = RED_COLOR
}
}
@IBAction func ActBtn_C(sender: AnyObject) {
GuessQuestionNum = (AnswerBtn_C.titleLabel?.text)!
if GuessQuestionNum == answer {
AnswerBtn_C.backgroundColor = GREEN_COLOR
} else {
AnswerBtn_C.backgroundColor = RED_COLOR
}
}
@IBAction func ActBtn_D(sender: AnyObject) {
GuessQuestionNum = (AnswerBtn_D.titleLabel?.text)!
if GuessQuestionNum == answer {
AnswerBtn_D.backgroundColor = GREEN_COLOR
} else {
AnswerBtn_D.backgroundColor = RED_COLOR
}
}
@IBAction func NextQuestion(sender: AnyObject) {
AnswerBtn_A.backgroundColor = BLUE_COLOR
AnswerBtn_B.backgroundColor = BLUE_COLOR
AnswerBtn_C.backgroundColor = BLUE_COLOR
AnswerBtn_D.backgroundColor = BLUE_COLOR
for _ in 1...5 {
randomQuestion(queModel: questionModel)
}
}
func randomQuestion(queModel:QuestionModel){
let questions = queModel.questions
func randomNumber() -> UInt32 {
var randomNumber = arc4random_uniform(UInt32(questions.count))
while previousNumber == randomNumber {
randomNumber = arc4random_uniform(UInt32(questions.count))
}
previousNumber = randomNumber
return randomNumber
}
let randomIndex = Int((UInt32(randomNumber())))
answer = "\(questions[randomIndex].answers[questions[randomIndex].correctAnswerIndex])"
SignImage.image = questions[randomIndex].question
AnswerBtn_A.setTitle("\(questions[randomIndex].answers[0])", forState: .Normal)
AnswerBtn_B.setTitle("\(questions[randomIndex].answers[1])", forState: .Normal)
AnswerBtn_C.setTitle("\(questions[randomIndex].answers[2])", forState: .Normal)
AnswerBtn_D.setTitle("\(questions[randomIndex].answers[3])", forState: .Normal)
}
}