繁体   English   中英

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

[英]Swift - Why is my function within a function not being called?

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

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

    }



}

用户可以对一组问题回答正确或错误。 问题存储在单独文件中的数组 0 - 12 中。 有一个变量来确定问题编号。

   var questionNumber: Int = 0

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

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

    }

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

目标是当用户遇到问题 #12 时,他们会看到一个 UIAlertView 来祝贺他们,并提供一个使用“重新启动”按钮重新启动的机会。

“重新启动”按钮运行一个函数,该函数将问题编号变量设置回 0,并且应该以询问第一个问题的 if/else 语句开始该函数。 (更改 UI 文本)

 func startOver() {


    questionNumber = 0
    nextQuestion()

}

但是,按“重新启动”时,UI 文本不会从最后一个问题更改为第一个问题,并且启动更改的唯一方法是按“真”或“假”按钮。

这运行了一个不同的函数并将第一个问题跳过到第二个问题。

由于“真”或“假”按钮没有启动重启警报(问题数不超过 12),我可以假设函数运行正确并将我的变量设置为 0。

但是,按“重新启动”时,重新启动应用程序的功能没有运行。

什么错误导致了这个? 我可以更改什么来使我的功能在按“重新启动”时运行?

Tl; dr:按重新启动按钮运行一个成功设置新变量的函数,但不运行指定的附加函数。 继续操作的唯一方法是按下应用程序的“真”或“假”按钮之一,从而打乱应用程序的流程。

非常感谢您的帮助 - 仍然是 Swift 的新手并且渴望学习!

原因是按钮被命名为重新启动。 swift 中还有其他函数也是restart() 只需更改它,它应该可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM