如何在swift类中将变量设置为self(class)?ios xcode
我有一个叫做Node的类。当我初始化节点时,我希望它的前一个节点和下一个节点总是指向它自己——形成一个循环的无休止的节点串如何在swift类中将变量设置为self(class)?ios xcode,ios,swift,Ios,Swift,我有一个叫做Node的类。当我初始化节点时,我希望它的前一个节点和下一个节点总是指向它自己——形成一个循环的无休止的节点串 class Node { var name: String! var previousNode: Node = self // error var nextNode: Node = self // error init?(name: String) { if name.isEmpty { r
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}
你不能在init方法上做吗?它会有相同的结果result@Joonp我明白了,你可以用viewDidLoad方法来写。谢谢。它帮助我更好地理解swift!