簡體   English   中英

可選和非可選不能從返回可選的函數中返回

[英]Optional and non-optional not able to be returned from function that returns an optional

我正在編寫一個函數,如果進行有序遍歷,該函數將從任何節點返回樹的下一個節點。 該函數具有可選的返回值,如果沒有下一個節點(即我們位於最后一個節點),則需要此返回值。 我從函數中返回了一個可選的和非可選的,並且在兩個地方都有編譯器錯誤。 這是代碼:

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 ,它與class TreeNode<T>的占位符類型T不相關(並隱藏)。

解決方案很簡單:只需在方法聲明中刪除占位符:

func nextInOrderNode() -> TreeNode<T>?

您在這里不需要它,因為class TreeNode<T>T的范圍是整個類定義,包括所有方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM