인쇄시 무한 재귀 문제가 있습니다. 한 번 전체주기를 설정하면 동물을 인쇄하기 위해 배우자가 인쇄됩니다. 배우자는 배우자를 인쇄합니다. 배우자는 자신의 배우자 등을 인쇄 할 때마다 스택 공간이 부족해 지거나 충돌 할 때까지 계속 인쇄합니다.
당신은 그 동물의 전체 인쇄를 호출하지 않고 동물의 배우자를 인쇄하여 그 휴식이 같은 필요
class Animal: NSObject {
// you should avoid using implicitly unwrapped optionals
// unless you absolutely have to for a specific reason that
// doesn’t appear to apply here (so remove the !s)
var name: String
var age: UInt
weak var spouse: Animal?
init(name: String, age: UInt) {
self.name = name
self.age = age
}
}
// to make something printable, you need to conform
// to the Printable protocol
extension Animal: Printable {
// And make description is a var rather than a function
override var description: String {
let spousal_status = spouse?.name ?? "None"
return "name=\(name) and age=\(age), spouse=\(spousal_status)"
}
}
let dog = Animal(name: "Lucky", age: 3)
let cat = Animal(name: "Branson", age: 4)
dog.spouse = cat
dog.description
cat.spouse = dog
println(dog) // Prints name=Lucky and age=3, spouse=Branson
주, 당신은 피하기 위해 프로토콜과 VAR 완벽 Printable
을 구현해야 이 문제는 그렇지 않으면 문제가 여전히 발생하는 기본 구현을 얻게됩니다.
은 BTW, 스위프트 스타일 규칙은 (그렇게하지 않으면 사실 가끔 컴파일 문제가 발생할 수 있습니다)
{
등을하기 전에,
=
,
->
같은 일 사이에 공간을 배치하는 것입니다. 배심원은 여전히
a: b
대 밖으로
a:b
밖에 있지만, 후자는 조금 더 읽기가 어렵습니다.
대단히 감사합니다. 어제 내 실수를 풀어 내 코드에서이를 수정할 수있었습니다. 귀하의 의견에 진심으로 감사드립니다. –
반갑습니다. Stack Overflow 팁 - 질문에 잘 대답하는 사람에게 감사하는 방법은 대답을 수락하는 것입니다. 이것은 다른 사람들이 주어진 답이 질문에 답하는 것을 볼 수있게 도와줍니다. (어쨌든 - 답이 완전히 정확하다는 것을 의미하지는 않습니다.) –