在视图控制器之间传递类?

时间:2018-01-24 03:56:09

标签: ios swift xcode uiviewcontroller segue

我正在建立一个测验应用,我试图通过让一个视图控制器充当问题视图控制器来减少视图控制器的数量。这是用户正在进行测验的视图控制器。

我有多个问题库,其中包含特定于某个类别的问题。这些问题库是.swift文件,我认为它们被归类为类,它们看起来像这样:

import Foundation

class QuestionBank {

var list = [Questions]()

init() {

    let item = Questions(text: "what does blah blah blah mean?", correctAnswer: "blah blah", textA: "blah blah blah", textB: "blah", textC: "blah bla", textD: "blee blah" )

    list.append(item)

    list.append(Questions(text: "this is a question?", correctAnswer: "correct answer", textA: "examplea", textB: "exampleb", textC: "examplec", textD: "exampled"))

    list.append(Questions(text: ".......

    list.append(Questions(text: ".......

    list.append(Questions(text: ".......

    }


}

下面是QuestionViewController的第一行,但它显示var allQuestions包含GeographyQuestionBank。 GeographyQuestionBank看起来像上面的QuestionBank示例代码(但实际问题大声笑)

import UIKit

import Foundation

class QuestionsViewController: UIViewController {

var allQuestions = GeographyQuestionBank()

...

我理解如何使用prepare(for segue:...)函数在视图控制器之间传递信息。但我不知道如何将类传递给allQuestions变量。那可能吗?

我希望这是有道理的,如果不是,请发送信息,我会尝试更好地解释它。但我只是希望能够将问题库类传递给QuestionsViewController,具体取决于在前一个视图控制器上选择的类别。

2 个答案:

答案 0 :(得分:0)

所以在Swift中你不能自己传递你的类来查看控制器,因为你可以在任何地方(通常)实例化它们,或许你指的是将一个类的实例传递给不同视图控制器?

如果您的问题是静态的,即您只是按类别列出这些问题而不是在它们被放入后更改它们,那么您根本不需要它们的类别。您可以将它们放在structenum中,以便随时随地公开访问它们。

无需将问题实例或所有问题传递给不同的视图控制器。如果您将它们全部收集到allQuestions变量中,则可以根据实施情况迭代或删除元素

答案 1 :(得分:0)

如果将问题数组传递给第二个视图控制器,就会变得非常简单。

第一视图控制器

import UIKit

 class FirstViewController: UIViewController {

        var selectedCategoryQuestions :[Questions] = []
        override func viewDidLoad() {
            super.viewDidLoad()
        }
        @IBAction func onClickBtnHistoryQuestions(_ sender: Any)
    {
        //Fill your array with History Question
       self.performSegue(withIdentifier: "yourSecondVC", sender: nil)
    }
    @IBAction func onClickBtnGeoQuestions(_ sender: Any) {
        //Fill your array with Geo Question
self.performSegue(withIdentifier: "yourSecondVC", sender: nil)
    }

 if (segue.identifier == "yourSecondVC")
        {
            let destVC:yourSecondVC =  segue.destination as! yourSecondVC
            destVC.questionList = selectedCategoryQuestions

        }
    }

第二视图控制器

 class SecondViewController: UIViewController {

        var questionList:[Questions] = []
        override func viewDidLoad() {
            super.viewDidLoad()


            println(questionList)  //You get selected list here
        }

}