[英]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.