我对Swift非常陌生。我正在创建一个允许用户创建注册表格的应用程序。我有两个文件/场景,FirstViewController和SecondViewController。 SecondViewController允许用户创建问题。 FirstViewController将在UITableView中显示所有创建的问题。在我的SecondViewController中,我有一个名为Question的类,该类基本上可以帮助我创建一个问题,下面显示它作为上下文。

class Question {
    var Label: String
    var required: Int

    // create question
    init (Label: String, required: Int) {
        self.Label = Label
        self.required = required
    }

}

class textInput: Question {
    var placeHolder: String

    init (placeHolder: String, Label: String, required: Int) {
        self.placeHolder = placeHolder
        super.init(Label: Label, required: required)
    }
}

class multiChoice: Question {
    var answers: [String]

    init(answers: [String], Label: String, required: Int) {
        self.answers = answers
        super.init(Label: Label, required: required)
    }

}


在FirstViewController中,我需要创建一个该类型的数组,以在UITableView中保留所有问题的运行列表...

var formQuestions: [Question]


显然,FirstViewController无法访问此自定义对象类型。我的问题是如何做到这一点?我可以将整个类复制并粘贴到我的FirstViewController中,但这将是很糟糕的编程...

谢谢您的帮助。

最佳答案

您的FirstViewController无权访问Question类及其子类,因为它们均在SecondViewController中声明。这意味着它们对于SecondViewController是本地的,其他任何地方都无法访问它。您需要做的是使问题类具有全局性。

因此,目前您的课程如下:(省略了内容)

class SecondViewController: UIViewController {
    class Question {
    }

    class TextInputQuestion: Question {
    }

    class MultiChoiceQuestion: Question {
    }
}


您应该将它们移出SecondViewController

class SecondViewController {
}

class Question {
}

class TextInputQuestion: Question {
}

class MultiChoiceQuestion: Question {
}


哦,对了,我重命名了您的班级名称!您应该始终对类使用PascalCase,我认为添加Question一词将更能说明它们的含义。

关于swift - 在不同场景中声明类变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34803399/

10-10 20:52