如何在iOS应用程序和打印结果上检索测验问题?

时间:2017-10-31 01:49:42

标签: ios swift data-structures

我正在尝试使用swift为iOS构建测验应用程序。我必须提出450个问题,但这将在swift文件上占用很多行。你可以看到我的4个问题在代码上有4行,想想450个问题。有什么建议我可以从另一个文件中检索问题吗?是否会发生任何内存过载并使应用程序崩溃?这是我的代码:

import UIKit

struct Question {
    var Question: String!
    var Answers: [String]!
    var Answer: Int!
}

class LittleTestViewController: UIViewController {

    //MARK: Properties
    @IBOutlet weak var questionLabel: UILabel!
    @IBOutlet var buttons: [UIButton]!

    var Questions = [Question]()
    var QNumber = Int()
    var answerNumber = Int()

    override func viewDidLoad() {
        super.viewDidLoad()
        Questions = [
            Question(Question:"KEK1.Tα Συστήματα μη Επανδρωμένων Αεροσκαφών(ΣμηΕΑ) επιτρέπεται να ίπτανται:", Answers: ["α) Με μέγιστο ύψος τα 400 πόδια (FT) επάνω από το έδαφος ή την επιφάνεια της θάλασσας (AGL,MSL).","β)Εντός Προσωρινών Αποκλειστικών Περιοχών (Temporary Segregated Areas TSA) για πτήσεις ΣμηΕΑ.","γ)Σε καθορισμένα ίχνη και ύψη που προσδιορίζονται με ειδικές άδειες των Υπηρεσιών Εναέριας Κυκλοφορίας της ΥΠΑ.","δ) Όλες οι απαντήσεις είναι σωστές."], Answer: 3),
            Question(Question:"ΚΕK2. Παρέχεται υπηρεσία Ελέγχου Εναέριας Κυκλοφορίας ‐ ΕΕΚ (Air Traffic Control‐ATC) στις πτήσεις ΣμηΕΑ;", Answers: ["α) Όχι, δεν παρέχονται υπηρεσίες εναέριας κυκλοφορίας ‐ ΕΚ (Air Traffic Services ‐ATS)","β) Ναι, παρέχεται υπηρεσία Ελέγχου Εναέριας Κυκλοφορίας (ATC).","γ) Όταν απαιτείται, οι Υπηρεσίες Εναέριας Κυκλοφορίας της ΥΠΑ εκδίδουν ειδικές άδειες και οδηγίες.","δ) Οι απαντήσεις α και γ είναι σωστές."], Answer: 3),
        Question(Question:"KEK3. Τα ΣμηΕΑ (UAS) επιτρέπεται να πετούν:", Answers: ["α) Κάτω από ύψος 400 ποδιών, δηλαδή, κάτω από τα επιτρεπόμενα όρια για την κυκλοφορία επανδρωμένων αεροσκαφών.","β) Εντός προσωρινών περιοχών που προσδιορίζονται από τις υπηρεσίες εναέριας κυκλοφορίας της ΥΠΑ.","γ) Κάτω από ύψος 46.000 ποδιών, δηλαδή, κάνω από τα ανώτερα όρια του εναέριου χώρου για την κυκλοφορία επανδρωμένων αεροσκαφών.","δ) Οι απαντήσεις α και β είναι σωστές."], Answer: 3),
        Question(Question:"ΚΕK4. Η διεξαγωγή Πτήσεων ΣμηΕΑ (UAS) απαγορεύεται γενικά σε εναέριο χώρο:", Answers: ["α) Σε περιοχές που διενεργούνται πτήσεις επανδρωμένων αεροσκαφών.","β) Σε απόσταση μικρότερη των 8 χιλιομέτρων από αεροδρόμια.","γ) Απαγορεύεται η πτήση ΣμηΕΑ (UAS) ανοικτής (Open) κατηγορίας επάνω από συγκεντρώσεις προσώπων.","δ) Όλες οι απαντήσεις είναι σωστές."], Answer: 3)]


        pickQuestion()

    }

    func pickQuestion ()
    {
        if Questions.count > 0 {
            QNumber = Questions.count
            questionLabel.text = Questions[QNumber].Question

            answerNumber = Questions[QNumber].Answer

            for i in 0..<buttons.count{
                buttons[i].setTitle(Questions[QNumber].Answers[i], for: UIControlState.normal)
            }
            Questions.remove(at: QNumber)
        }
        else
        {
            NSLog("Done")
        }
    }
    @IBAction func bt1(_ sender: Any) {
        if answerNumber == 0 {
            pickQuestion()
        }
        else
        {
            NSLog("Wrong!")
            pickQuestion()
        }
    }
    @IBAction func btn2(_ sender: Any) {
        if answerNumber == 1 {
            pickQuestion()
        }
        else
        {
            NSLog("Wrong!")
            pickQuestion()
        }
    }
    @IBAction func btn3(_ sender: Any) {
        if answerNumber == 2 {
            pickQuestion()
        }
        else
        {
            NSLog("Wrong!")
            pickQuestion()
        }
    }
    @IBAction func btn4(_ sender: Any) {
        if answerNumber == 3 {
            pickQuestion()
        }
        else
        {
            NSLog("Wrong!")
            pickQuestion()
        }
    }

}

2 个答案:

答案 0 :(得分:1)

我猜您可以尝试x(#),因为问题和答案是静态内容。您可以使用xt(#)来跟踪正确与错误的计数。

但是,如果您正在考虑扩展问题集,则应该查看SQLite / CoreData。

答案 1 :(得分:1)

您可以创建包含所有数据的JSON文件,即

1。 Questions.json

 [{"question":"ques1","answers":["ans1", "ans2", "ans3"], "answer": 1},
 {"question":"ques2","answers":["ans1", "ans2", "ans3"], "answer": 2},
 {"question":"ques3","answers":["ans1", "ans2", "ans3"], "answer": 3}]

2. 阅读文件内容并创建questions array

    if let path = Bundle.main.path(forResource: "Questions", ofType: "json")
    {
        if let array = (try? JSONSerialization.jsonObject(with: Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe), options: JSONSerialization.ReadingOptions.allowFragments)) as? [[String : Any]]
        {
            var questionsArray = [Question]()
            for item in array
            {
                questionsArray.append(Question(item: item))
            }
            print(questionsArray)
        }
    }

3。 Question struct

struct Question
{
    var Question: String?
    var Answers: [String]?
    var Answer: Int?

    init(item: [String: Any])
    {
        self.Question = item["question"] as? String
        self.Answers = item["answers"] as? [String]
        self.Answer = item["answer"] as? Int
    }
}