数组中的最后一个元素是nil

时间:2016-09-03 23:29:40

标签: ios arrays swift indexing

我创建了一个简单的测验应用程序,它会计算用户回答的问题数量,并将它们放在另一个视图的标签中。问题是,当用户回答最后一个问题(数组)正确时,它不会像我的其他问题一样在我的计数器中计数,而只是切换视图。 因此,如果最后一个问题得到正确回答,则不会在下一个视图中显示4个正确,而只显示3。 还是没想到。有帮助吗? 我的代码:

func pickQuestion(){

    if questions.count > 0{

        qNumber = random() % questions.count
        questions.shuffleInPlace()
        qLabel.text = questions[qNumber].question

        answerNumber = questions[qNumber].answer

        for i in 0..<buttons.count{
            buttons[i].setTitle(questions[qNumber].answers[i], forState: .Normal)

        }

        questions.removeAtIndex(qNumber)   
    }

    else {

       NSLog("done")

       self.performSegueWithIdentifier("Segue1", sender: self)
    }  
}

按钮代码,我检查答案是否正确:

@IBAction func btn1(sender: AnyObject) {

    if answerNumber == 0 {
        pickQuestion()
        count += 1
    }
    else {
        NSLog("Wrong")
        pickQuestion()
    }
}

经过一些调试后我发现了这一点 questions.removeAtIndex(qNumber) 是删除数组的那个(removeAtIndex用于防止问题在已经回答时再次出现)

我将qNumber声明为:

qNumber = random()%questions.count

如何将qNumber设置为在应答后被删除的当前数组?

我正在切换视图:

其他{

   NSLog("done")

   self.performSegueWithIdentifier("Segue1", sender: self)
}  

1 个答案:

答案 0 :(得分:1)

显示最后一个问题后,将其从数组中删除,使数组为空。然后,在回答时,你有:

 if answerNumber == 0 {
      pickQuestion()
      count += 1
}

函数中的代码检查questions.count是否大于0,它不是,并执行segue。 segue在计数更新之前发生。尝试更改块以允许首先更新计数:

if answerNumber == 0 {
    count += 1
    pickQuestion()
}