gpt4 book ai didi

swift - 为什么我要在检查变量不为零后再次使用可选链接?

转载 作者:行者123 更新时间:2023-11-28 10:14:46 24 4
gpt4 key购买 nike

class LinkedList : NSObject
{
var head : Node?
var tail : Node?

func insertAtHead( newNode : Node )
{
if (head != nil) {
newNode.next = head
head?.prev = newNode
head = newNode
}
else {
head = newNode
}
}
}

我的节点类是:

class Node : NSObject
{
var value : Int = 0
var next : Node?
var prev : Node?
}

我的困惑在于 insertAtHead 方法中的 head?.prev = newNode 行。我已经检查并确认 head 不是 nil,为什么我不能在那种情况下输入 head.prev = newNode 呢?为什么要使用可选链?

最佳答案

你不应该,这是一个常见的 Swift 反模式。试试这个:

class LinkedList {
var head: Node?
var tail: Node?

func insertAtHead(newNode: Node) {
if let head = head {
newNode.next = head
head.prev = newNode
}

head = newNode
}
}

简单地与nil 进行比较对head 的可选性没有任何影响。您仍然必须以一种或另一种方式打开它。检查 nil 并(同时)解包它的一种方法是使用如上所示的条件绑定(bind)。

其他几点:

  • head = newNode 无条件出现在 if 语句的“then”和“else”中。因此,它可以被提取出来,并且不需要 else block 。
  • 没有理由应该从 NSObject 继承这个类。

关于swift - 为什么我要在检查变量不为零后再次使用可选链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42686170/

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