如何在swift类中将变量设置为self(class)?ios xcode

如何在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

我有一个叫做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}

你不能在init方法上做吗?它会有相同的结果result@Joonp我明白了,你可以用viewDidLoad方法来写。谢谢。它帮助我更好地理解swift!