我有一个叫做Node的类。当我初始化Node时,我希望它的上一个节点和下一个节点始终指向自身-使节点循环不断。
class Node {
var name: String!
var previousNode: Node = self // error
var nextNode: Node = self // error
init?(name: String) {
if name.isEmpty {
return nil
}
self.name = name
}
func setPreviousNode(prevNode: Node) {
self.previousNode = prevNode
}
func setNextNode(nextNode: Node) {
self.nextNode = nextNode
}
}
如何在课堂上自动将变量分配给self?
由于self
在初始化所有self属性之前无法引用,因此您必须采用两阶段方法并使用init
–但还需要使节点成为可选节点,因为您需要先将它们设置为某些值(例如nil
),然后在设置了所有self的属性(包括它们)之后,将它们再次设置为self。
您可以采用与使用时相同的方法,name
并在以后为方便起见而使它们隐式为可选,只要您小心确保它们永远不会出现nil
。
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}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句