Swift - Почему моя функция внутри функции не вызывается? - PullRequest
0 голосов
/ 10 июня 2018

Я работаю над проектом для простого приложения для викторины.

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

    }



}

Пользователь может ответить на ряд вопросов как true, так и false.Вопросы хранятся в массиве 0 - 12 в отдельном файле.Существует переменная для определения номера вопроса.

   var questionNumber: Int = 0

В функции выполняется оператор if / else после каждого вопроса - если переменная номера вопроса <= 12, задается следующий вопрос иПеременная номера вопроса увеличивается на 1. </p>

 @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, который поздравляет их и предлагает возможность перезапустить с помощью кнопки «Restart».

Кнопка «Restart» запускает функцию, которая устанавливает переменную номера вопроса обратно в 0 и должна начинать функцию с if /еще заявление, которое задает первый вопрос.(Изменяет текст пользовательского интерфейса)

 func startOver() {


    questionNumber = 0
    nextQuestion()

}

Однако при нажатии «Перезапустить» текст пользовательского интерфейса не изменяется от последнего вопроса к первому вопросу, и единственный способ инициировать изменение - нажать «Кнопка «истина» или «ложь».

Эта функция запускает другую функцию и пропускает первый вопрос ко второму.

Начиная с того факта, что кнопка «истина» или «ложь» неИнициируя предупреждение о перезапуске (количество вопросов не превышает 12), я могу предположить, что функция работала правильно и установить мою переменную равной 0.

Однако функция перезапуска приложения не запускалась при нажатии «Перезапуск».

Какая ошибка вызывает это?Что я могу изменить, чтобы заставить мою функцию запускаться при нажатии «Restart»?

Tl; dr: Нажатие кнопки «Restart» запускает функцию, которая успешно устанавливает новую переменную, но не запускаетсяуказана дополнительная функция.Единственный способ продолжить - это нажать одну из кнопок приложения «истина» или «ложь», что мешает работе приложения.

Большое спасибо за помощь - Все еще новичок в Swift истремится учиться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...