从数组中随机抽取问题(SWIFT),无重复

3

我已经浏览了几个小时,试图找到正确的答案,但似乎无法正确应用于我的代码。
大多数情况下,stackoverflow上为此问题提供的答案都是关于字符串和整数的例子,而我正在与问题类型挣扎。

我刚开始接触Xcode和Swift,并且迄今为止成功制作了一个完美运行的问答应用程序。

我使用了shuffle,但是我找不到代码的其余部分来避免重复之前提出的问题。
我想要做的正是:现在我有7个问题, 我想让这些问题在任何时候以不同的顺序只被问一次。

我有两个类在另外2个swift文件中。

这是我的QuestionBank类型,其中包含7个问题,全部已经正确完成:

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))

以下是我的问题类:

}
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
 }

以下是我认为应该发生问题但实际上没有的更新问题函数:

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()
1个回答

1
你似乎每次调用updateQuestion都在洗牌list,这似乎是问题所在。你只需要调用一次shuffle并逐一迭代问题即可。要解决此问题,请从updateQuestion中删除洗牌,并在viewDidLoad中添加它,或者根据条件在updateQuestion中仅调用一次,如下所示:
if questionNumber == 1 {
    allQuestions.list.shuffle()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接