我有一个名为Node的类。当我初始化Node时,我希望它的前一个节点和下一个节点始终指向它自己 - 创建一个循环无限的节点串。
None
如何在课程中自动将变量分配给 self ?
答案 0 :(得分:1)
由于在初始化所有self属性之前无法引用self
,因此必须采用两阶段方法并使用init
- 但您还需要使节点可选,因为您首先需要将它们设置为某个东西(例如nil
),然后在设置了所有自我属性(包括它们)后再将它们设置为自我。
您可以采用与name
一样的方法,并且为了方便以后隐式选项,只要您小心确保它们永远不会nil
。< / p>
class Node {
var name: String!
var previousNode: Node!
var nextNode: Node!
init?(name: String) {
if name.isEmpty {
return nil
}
self.name = name
previousNode = self
previousNode = self
}
// since this takes a `Node` not a `Node?` you know
// it can’t set them to nil, which is good
func setPreviousNode(prevNode: Node) {
self.previousNode = prevNode
}
func setNextNode(nextNode: Node) {
self.nextNode = nextNode
}
}
let node = Node(name: "fred")
// good to know the playground printing code checks for cycles!
// {name "fred" {name "fred" {…} nil} nil}