gpt4 book ai didi

swift - 需要帮助使用 Swift inout 和可选

转载 作者:行者123 更新时间:2023-11-30 14:17:27 30 4
gpt4 key购买 nike

这是我尝试使用的功能

func merge(inout A: DNode?, inout And B: DNode?) -> DNode? {
if A == nil && B == nil {
return nil
}
if A == nil {
return B
}
if B == nil {
return A
}
return A!.isLessThan(B!) ? A! : B!
}

这是我尝试使用“合并”功能的方法

class Heap {
var minDNode: DNode?

func start(inout newNode: DNode) {
self.minDNode = merge(&self.minDNode, And: &newNode) // error
// Cannot invoke 'merge' with an argument list of type '(inout DNode?, And: inout DNode)'
}

func merge(inout A: DNode?, inout And B: DNode?) -> DNode? {
...
}
}

如何解决这个问题?

查看 Swift optional inout parameters and nil 的答案,

制作

var minDNode: DNode? 

进入

var minDNode: DNode? = nil

没有解决问题

最佳答案

@MartinR 在评论中提出了一个很好的观点:“为什么 merge() 接受 inout 参数?参数没有被修改,所以这看起来是一个不必要的复杂化。”

错误的原因是使用inout时必须传递准确的类型,而DNodeDNode?是两个不同的类型。newNode 需要声明为可选,因为这是合并所期望的:

func start(inout newNode: DNode?) {
self.minDNode = merge(&self.minDNode, And: &newNode) // this call now works
}

不过,您可能应该重新编写代码,以删除不需要的 inout 调用。

关于swift - 需要帮助使用 Swift inout 和可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30954955/

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