gpt4 book ai didi

ios - 可选和非可选不能从返回可选的函数返回

转载 作者:行者123 更新时间:2023-11-28 06:48:49 24 4
gpt4 key购买 nike

我正在编写一个函数,如果进行中序遍历,它会返回树的下一个节点来自任何节点的内容。该函数有一个可选的返回值,如果没有下一个节点(即我们在最后一个节点),则需要返回值。我从函数返回一个可选的和非可选的,并且在这两个地方都有编译器错误。这是代码:

class TreeNode<T> 
{
var leftChild : TreeNode?
var rightChild : TreeNode?
var parent : TreeNode?
var value : T

init(withValue:T) {
self.value = withValue
}

func nextInOrderNode<T>() -> TreeNode<T>?
{
if var nextNode = rightChild
{
while nextNode.leftChild != nil {
nextNode = nextNode.leftChild!
}
return nextNode //error 1
}
else
{
var nextNode = parent
var currentNode = self
while nextNode?.rightChild !== currentNode {
currentNode = nextNode!
nextNode = nextNode?.parent
}
return nextNode //error 2
}
}
}

错误是:

error 1: Cannot convert return expression of type 'TreeNode<T>' to return type 'TreeNode<T>?'
error 2: Cannot convert return expression of type 'TreeNode<T>?' to return type 'TreeNode<T>?'

我不确定我在这里做错了什么,因为从我所看到的情况来看,这似乎应该可行。任何帮助将不胜感激。

最佳答案

问题与可选返回值和非可选返回值无关。在

func nextInOrderNode<T>() -> TreeNode<T>?

你引入了一个新的占位符类型 T , 在这个方法的本地,这与占位符类型无关(并隐藏)Tclass TreeNode<T> .

解决方法很简单:只需删除方法声明中的占位符:

func nextInOrderNode() -> TreeNode<T>?

这里不需要它,因为 T 的范围在 class TreeNode<T>是整个类定义,包括所有方法。

关于ios - 可选和非可选不能从返回可选的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35471413/

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