我学得很快,这似乎是一个简单的问题,但我无法弄清楚。我正在制作一个琐事游戏来学习基础知识,并希望将我的问题库存储在一个单独的.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文件。
非常感谢任何帮助和见解。
答案 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)