Swift - 为什么我的函数没有被调用?

时间:2018-06-10 19:49:36

标签: ios swift swift4

我正在开发一个简单测验应用程序的项目。

SELECT A.EducationalAttainment, A.age, A.population_count/B.age_population_count population_fraction
FROM 
    educational_attainment A
JOIN
    (SELECT age, sum(population_count) age_population_count
    FROM educational_attainment
    GROUP BY age) B
ON A.age=B.age;

用户可以回答一组问题的真或假。问题存储在一个单独的文件中,数组为0-12。有一个变量可以确定问题编号。

 import UIKit

class ViewController: UIViewController {

    let allQuestions = QuestionBank()
    var pickedAnswer: Bool = false
    var questionNumber: Int = 0

    //Place your instance variables here


    @IBOutlet weak var questionLabel: UILabel!
    @IBOutlet weak var scoreLabel: UILabel!
    @IBOutlet var progressBar: UIView!
    @IBOutlet weak var progressLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let firstQuestion = allQuestions.list[0]
        questionLabel.text = firstQuestion.questionText

    }

    @IBAction func answerPressed(_ sender: AnyObject) {
        if sender.tag == 1 {
            pickedAnswer = true
        } else if sender.tag == 2 {
            pickedAnswer = false
        }

        checkAnswer()

        questionNumber = questionNumber + 1

        nextQuestion()

    }


    func updateUI() {

    }


    func nextQuestion() {

        if questionNumber <= 12 {
            questionLabel.text = allQuestions.list[questionNumber].questionText
        }
        else {
            let alert = UIAlertController(title: "Quiz Complete", message: "You have completed the quiz, do you want to start over?", preferredStyle: .alert)

            let restartAction = UIAlertAction(title: "Restart", style: .default, handler: { (UIAlertAction) in
                self.startOver()
            })

            alert.addAction(restartAction)

            present(alert, animated: true, completion: nil)

        }

    }


    func checkAnswer() {

        let correctAnswer = allQuestions.list[questionNumber].answer

        if correctAnswer == pickedAnswer {
            print("You got it!")
        } else {
            print("Wrong!")
        }

    }


    func startOver() {

        questionNumber = 0
        nextQuestion()

    }



}

在每个问题之后运行一个函数中的if / else语句 - 如果问题编号变量&lt; = 12,则询问下一个问题并且问题编号变量增加1。

   var questionNumber: Int = 0

否则,系统会询问他们是否要重新启动。

目标是当用户遇到问题#12时,会向他们展示一个祝贺他们的UIAlertView,并提供一个重启&#34;重启&#34;按钮。

&#34;重启&#34;按钮运行一个函数,它将问题编号变量设置回0,并应该使用if / else语句开始函数,该语句会询问第一个问题。 (更改UI文本)

 @IBAction func answerPressed(_ sender: AnyObject) {
        if sender.tag == 1 {
            pickedAnswer = true
        } else if sender.tag == 2 {
            pickedAnswer = false
        }


    checkAnswer()

    questionNumber = questionNumber + 1

    nextQuestion()

}


func updateUI() {

}


func nextQuestion() {

    if questionNumber <= 12 {
        questionLabel.text = allQuestions.list[questionNumber].questionText
    }
    else {
        let alert = UIAlertController(title: "Quiz Complete", message: "You have completed the quiz, do you want to start over?", preferredStyle: .alert)

        let restartAction = UIAlertAction(title: "Restart", style: .default, handler: { (UIAlertAction) in
            self.startOver()
        })

        alert.addAction(restartAction)

        present(alert, animated: true, completion: nil)

    }

然而,按下&#34;重新启动&#34; UI文本不会从最终问题变为第一个问题,并且启动更改的唯一方法是按下&#34; true&#34;或&#34;假&#34;按钮。

这会运行不同的功能,并将第一个问题跳到第二个问题。

从&#34; true&#34;或&#34;假&#34;按钮没有启动重启警报(问题计数不在12以上),我可以假设函数正确运行并将我的变量设置为0。

但是,按下&#34;重新启动&#34;。

时,重启应用程序的功能未运行

导致此错误的是什么?我可以通过按&#34;重新启动&#34;?

来更改我的功能

Tl; dr:按下“重启”按钮会运行一个成功设置新变量的函数,但不会运行指定的附加函数。唯一的方法是按下应用程序之一&#34; true&#34;或&#34;假&#34;按钮,弄乱了应用程序的流程。

非常感谢你的帮助 - 对Swift来说还是新手并且渴望学习!

1 个答案:

答案 0 :(得分:0)

原因是按钮名为重新启动。快速还有其他功能,restart()也是如此。只需更改它,它就可以工作。