如何从单独的.swift文件访问常量

时间:2014-12-22 22:13:38

标签: ios swift

我学得很快,这似乎是一个简单的问题,但我无法弄清楚。我正在制作一个琐事游戏来学习基础知识,并希望将我的问题库存储在一个单独的.swift文件中。

我可以看到这个类出现在xcodes intellisense中,但不知道如何实际使用我在该文件中创建的常量。常量是字典类型,它们包含键和值对中的问题,答案,正确答案和问题编号。

在我的主ViewController中,我创建了一个空数组,并希望用我在单独的.swift文件中包含的常量字典问题填充它:

var BasicQuestionBank: [[String:String]] = [] // Array for multiple dictionary storage

func AddingToQuestionBankOne() {
        BasicQuestionBank.append(Questions.????????) // Can't figure out how to put this in array from separate file.
}

我单独的.swift文件看起来很像这样但有多个问题:

public class Questions {

    let question1 = [
        "question": "A square has how many sides?",
        "answerA": "1",
        "answerB": "2",
        "answerC": "3",
        "answerD": "4",
        "correctAnswer": "answerD",
        "questionNumber": "A-001-001"]
}

此外,通过" questionNumber"以编程方式填充问题库数组。关键,这可能吗?假设我有20个问题,其中10个是" A-001"前缀和10是" A-002"前缀,我如何选择从我的选择中选择10?我已经尝试将它们放入for-in循环中,但是再一次,无法弄清楚如何访问其他.swift文件。

非常感谢任何帮助和见解。

2 个答案:

答案 0 :(得分:2)

在您的示例中,您定义了一个具有常量成员变量的类Questions。但是,您需要创建该类的“实例”才能访问其成员变量:

public class Questions {
    let question1 = [ etc. ]
}

var basicQuestionBank: [[String:String]] = []

func addToQuestionBankOne() {
    // qs is an instance of the Questions class
    let qs = Questions()
    // and has a member variable, question1
    basicQuestionBank.append(qs.question1)
}

类就像模板一样。您可以创建类的实例(这些称为对象),它们都具有相同的成员变量和方法,但可以在其成员变量中包含不同的值。

在这种情况下,它可能看起来有点令人困惑,因为你创建了一个只有一个成员的类,它是一个let(因此它永远不能保存除初始值之外的任何内容),以及没有init方法(这是唯一可以将question1设置为与您给出的默认值不同的地方)。但是,您只能通过创建Questions的实例来访问该值,然后访问该实例上的question1属性。

顺便说一句,对于下一步,您可能希望尝试将问题表示为结构,而不是字符串字典:

struct QandA {
    let question: String
    let answers: [String]
    let correctAnswer: Int
    let questionNumber: String
}

let question1 = QandA(
    question: "A square has how many sides?",
    answers: ["One","Two","Three","Four"],
    correctAnswer: 4,
    questionNumber: "A-001-001")

将数据放在这样的结构中可以更容易地进行操作:

println(question1.question)
for (number, answer) in enumerate(question1.answers) {
    println("\(number): \(answer)")
}

就像上面一样,这是创建QandA结构的实例(结构类似于类 - Swift书中有关于差异的更多细节),称为{{1}然后访问此实例的属性。

答案 1 :(得分:0)

您可以在项目中启用Core Data,然后创建一个名为“Question”的新Core Data对象。添加问题,答案,正确答案等字段。然后,在AppDelegate中,创建问题并在第一次加载应用程序时将其添加到ManagedObjectContext。您可以在Swift herehere中找到适合Core Data的精彩教程。如果您想更改问题,只需在AppDelegate.swift中更改它们,并让应用程序在下次打开时重新加载它们。