2015-06-20 63 views
0

這需要幫助的是我試圖用在使用雨燕INOUT可選

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 

沒有解決問題

+2

爲什麼'merge()'獲取inout參數?參數沒有修改,所以這似乎是一個不必要的複雜。 –

+0

哦,,我從功能 –

回答

0

@MartinR使得一個好點的意見:「爲什麼merge()需要輸入參數?論點沒有修改,所以這看起來像是一個不必要的複雜因素。「

的原因錯誤是,你必須使用inoutDNodeDNode?當兩種不同類型傳遞的確切類型。 newNode需要被聲明爲可選的,因爲這正是歸併期待:

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

你或許應該返工你的代碼,但是,刪除不需要它們的地方inout電話。

+0

刪除了很長的一部分,謝謝!解決了錯誤。 –