2015-06-20 64 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

删除了很长的一部分,谢谢!解决了错误。 –