【发布时间】:2017-05-30 15:06:15
【问题描述】:
您好,我是 Swift 新手,我正在尝试实现一个 Graph 结构。我已经定义了 Node 和 Edge 结构,现在我正在尝试检查图中是否存在特定的边。类和相关函数是这样的:
class Graph<T: Equatable> {
private var storedNodes = [Node]()
private var storedEdges = [Edge]()
func containsSimpleGraphEdge(targetEdge: Edge) -> Bool {
let simpleGraphEdges = self.storedEdges.map({edge in (edge.source, edge.dest)})
let targetSimpleGraphEdge = (targetEdge.source, targetEdge.dest)
return simpleGraphEdges.contains(targetSimpleGraphEdge)
}
但是 Xcode 抱怨我应该在最后一个 contains 语句中插入 'where:'。我可以知道为什么会这样吗?我的目的只是检查图中是否存在边。映射到元组是因为在 Edge 实现中还有其他属性;这里只需要检查源节点和目的节点。
【问题讨论】:
-
targetSimpleEdge是什么? -
一般说明:您的意思是要将
targetSimpleGraphEdge传递给contains函数吗? -
你应该让你的
Edge符合Equatable这样你就可以摆脱所有这些元组绒毛 -
另外,可能值得将其命名为
UndirectedGraph或DirectedGraph(它们可能都是抽象Graph的子类)。