在swift中使用.filter():错误:无法转换类型为';([V])->;布尔';到预期的参数类型';([)]->;布尔';

在swift中使用.filter():错误:无法转换类型为';([V])->;布尔';到预期的参数类型';([)]->;布尔';,swift,generics,Swift,Generics,我试图用outEdges方法创建一个Graph类(只是为了学习Swift,不是因为我需要一个Graph类) 我想我可以使用.filter()来实现outEdges方法,但我得到了以下错误: error: cannot convert value of type '([V]) -> Bool' to expected argument type '([_]) -> Bool' return edges.filter(leftVertexIs(v))

我试图用
outEdges
方法创建一个
Graph
类(只是为了学习Swift,不是因为我需要一个Graph类)

我想我可以使用
.filter()
来实现outEdges方法,但我得到了以下错误:

error: cannot convert value of type '([V]) -> Bool' to expected argument type '([_]) -> Bool'
        return edges.filter(leftVertexIs(v))
                            ^~~~~~~~~~~~~~~
使用此代码:

class Graph<V: Equatable> {
    var edges = [[V]]()

    func addEdge(v1: V, _ v2: V) -> Graph<V> {
        edges.append([v1, v2])
        return self
    }

    func leftVertexIs(v: V) -> (([V]) -> Bool) {
        return {(e: [V]) -> Bool in return e[0] == v}
    }

    func outEdges(v: V) -> [V] {
        return edges.filter(leftVertexIs(v))
    }
}

var g = Graph<Int>()
g.addEdge(2, 4).addEdge(4, 6).addEdge(3, 5).addEdge(2, 7)
g.outEdges(2)
类图{
变量边=[[V]]()
func addEdge(v1:V,v2:V)->图{
edges.append([v1,v2])
回归自我
}
函数leftVertexIs(v:v)->(([v])->Bool){
返回{(e:[V])->返回e[0]==V}
}
func outEdges(v:v)->[v]{
返回边。过滤器(leftVertexIs(v))
}
}
var g=图()
g、 加差(2,4)。加差(4,6)。加差(3,5)。加差(2,7)
g、 外缘(2)

(注意:我将筛选器谓词移动到一个闭包中,以确保其正常工作)

edges
的类型为
[[V]]
,然后是
edges.filter()
具有相同的类型,并且应该是
outEdges
的返回类型:

func outEdges(v: V) -> [[V]] {
    return edges.filter(leftVertexIs(v))
}

备注:不是将每个边存储为一个二元数组,而应该考虑使用元组<代码>(左:v,右:v)<代码>或<代码>结构> <代码> >