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

标签 ios swift option-type

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

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/

相关文章:

尽管没有登录 iTunes 帐户,iOS 仍恢复应用内购买

swift - 类似于闭包的弱var之类的东西

ios - 初始化继承困惑

ios - pod 规范 lint 失败

ios - 如何清空 UIPageViewController(移除里面的 ViewControllers)

ios - 分段控件上的 Swift 句柄操作

lambda - 多 map 的Java可选用法

java - 从 Java Optional ifPresent() 返回

swift - 在swift中从api访问嵌套字典

ios - Alamofire 不允许直接发送对象