클래스 Question
과 내포 된 구조체 MultipleChoiceAnswers
이 있습니다. Question
을 초기화 할 때 MultipleChoiceAnswers
도 초기화하고 Question
인스턴스에 대한 참조를 제공합니다. 그런 다음 MultipleChoiceAnswers
인스턴스를 인스턴스의 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
이 의미가 있습니다. 이 오류는 어떻게 든 해결할 수 있습니까? 에 MultipleChoiceAnswers
을 변경하기 때문에, (그것이
강력한
보장 비 nil
참조해야하기 때문에, 바람직하게는 후자) 나는 weak
또는 unowned
이것을 해결의 생각,하지만 난 아직 완전히 논리를 이해 생각하지 않는다 :
... 오류가 해결되지 않습니다.
을
의 비보호를 유지하면서이 오류를 해결하려면 어떻게해야합니까? nil
순환 참조가 보장 되나요?
P.S는 : 나는 실제로 로 시작하는이 순환 참조를해야하는지 여부를 아직조차 완전히 확실하지 않다, 정직하게,하지만이 임시 구현이 오류가 발생하기 때문에, 어쨌든 가능한 해결 방법에 대한 호기심이 있어요.
실제로 작동합니다. 고맙습니다. 그래서, (나는이 질문에 대한 하향 투표를했다) 이것은 "약한"및/또는 "소유하지 않은"것이 나의 경우와 완전히 무관하다는 것을 의미 하는가? 그것들은 단순히 메모리 누수를 막는 데 사용되는 것일까? 아마도? – Codifier
unowned는 좋은 선택이었습니다. 왜 당신이 다운 보위에 있었는지 전혀 모르겠습니다. –
오른쪽 위에 있습니다. 다시 한번 감사드립니다. – Codifier