gpt4 book ai didi

ios - 如何在 swift 类中将变量设置为 self(class)? iOS 代码

转载 作者:可可西里 更新时间:2023-11-01 02:21:32 25 4
gpt4 key购买 nike

我有一个名为 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}

关于ios - 如何在 swift 类中将变量设置为 self(class)? iOS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com