我有以下代码。我想创建问题的对象,从而导致一些解决方案。
这是我的问题对象:
class Question {
var question = String()
var answers = [String]?()
var prevQuestion:Question?
var followingQuestions:[Question]?
init (question: String, answers: [String]?) {
self.question = question
self.answers = answers
}
}
这是一个应该生成问题对象的函数(没有答案的问题对象是答案):
func initializeObjects () {
for i in 0...(questions.count - 1) {
questionObjects.append(Question(question: questions[i], answers: answers[i]))
}
// Q1
questionObjects[1 - 1].prevQuestion = nil
questionObjects[1 - 1].followingQuestions = [questionObjects[2 - 1], questionObjects[3 - 1]]
// Q2
questionObjects[2 - 1].prevQuestion = questionObjects[1 - 1]
questionObjects[2 - 1].followingQuestions = [questionObjects[4 - 1], questionObjects[6 - 1]]
// Q3
questionObjects[3 - 1].prevQuestion = questionObjects[1 - 1]
questionObjects[3 - 1].followingQuestions = [questionObjects[5 - 1], questionObjects[8 - 1]]
// Q4
questionObjects[4 - 1].prevQuestion = questionObjects[2 - 1]
questionObjects[4 - 1].followingQuestions = [questionObjects[9 - 1]]
// Q5
questionObjects[5 - 1].prevQuestion = questionObjects[3 - 1]
questionObjects[5 - 1].followingQuestions = [questionObjects[8 - 1], questionObjects[11 - 1]]
// Q6
questionObjects[6 - 1].prevQuestion = questionObjects[2 - 1]
questionObjects[6 - 1].followingQuestions = [questionObjects[16 - 1], questionObjects[7 - 1]]
// Q7
questionObjects[7 - 1].prevQuestion = questionObjects[6 - 1]
questionObjects[7 - 1].followingQuestions = [questionObjects[17 - 1], questionObjects[13 - 1]]
// and so on ...
} // end of initializeObjects()
但问题是,例如在问题#3中,我想将问题#5作为以下问题之一。但它尚未完全配置。因此,我想在此问题上加上地址,以便在其中填写日期数据。有可能吗?还是有另一种方式?非常感谢你。
答案 0 :(得分:1)
我认为来自“The Swift Programming Language”iBook的这两个引用回答了你的问题。 (免费提供@iBooks商店)
“如果您有使用C,C ++或Objective-C的经验,您可能知道这些语言使用指针来引用内存中的地址。一个Swift常量或变量引用某个引用类型的实例类似于C中的指针,但不是指向内存中地址的直接指针,并且不需要编写星号(*)来表示您正在创建引用。而是将这些引用定义为任何其他常量或变量在斯威夫特。“
“结构实例总是按值传递,类实例总是通过引用传递。”
所以我认为您的代码没问题,而且您无需更改当前的解决方案。
此外,我建议您阅读该书中的“收集类型的分配和复制行为”主题。