我有一个类Question
嵌套结构MultipleChoiceAnswers
。当初始化Question
时,我也初始化了MultipleChoiceAnswers
,并给它一个Question
实例的参考。然后我想将MultipleChoiceAnswers
实例分配给Question
实例的属性answers
。如何解决此循环参考初始化错误?
这里是一个概述:
struct Answer {
let value:Double;
let isCorrect:Bool;
}
class Question {
struct MultipleChoiceAnswers {
let question:Question;
let answers:[Answer];
}
let answers:MultipleChoiceAnswers;
init(possibleAnswersCount:UInt) {
let answers:[Answer];
/*
here I generate some Answer instances
that get appended to the answers Array
*/
self.answers = MultipleChoiceAnswers(question: self, answers: answers); // <-- error
}
}
然而,这导致错误:
Variable 'self.answers' used before being initalized
这是有道理的。不管怎样,我能不能解决这个错误?我想用weak
或unowned
解决这个的(最好是后者,因为它应该是一个
强
保证非nil
参考),但我不认为我完全理解其中的逻辑,但因为改变MultipleChoiceAnswers
到:
struct MultipleChoiceAnswers {
unowned let question:Question;
let answers:[Answer];
}
...不能解决错误。
如何解决此错误,同时保留
强
保证非nil
循环参考?
P.S:说实话,我甚至完全肯定但我是否真的需要这循环引用来开始的,但由于这试探性的实施提出了这个错误,我得到了好奇可能的解决方案呢。
确实有效。谢谢。所以,(这个问题是由我为这个问题得到的)决定的,这是否意味着“弱”和/或“无主”与我的情况完全不相干?那些仅仅是用来防止内存泄漏,也许呢?无主的 – Codifier 2014-09-28 22:49:09
在这里是一个不错的选择。我不知道你为什么被拒绝。 – 2014-09-29 01:05:58
对。再次感谢。 – Codifier 2014-09-29 16:26:33