假设我正在创建一个泛型类,我也想在其中创建通用成员也存储在泛型中的集合。这样做的正确语法是什么?为了试图了解我想要做的事情,最佳猜测如下:
class AdjacencyList<VertexType, EdgeType, VertexCollectionType: Collection, EdgeCollectionType: Collection> {
var vertices: VertexCollectionType<Vertex<VertexType>>
var edges: EdgeCollectionType<Edge<EdgeType>>
init() {
self.vertices = VertexCollectionType<VertexType>()
self.edges = EdgeCollectionType<EdgeType>()
}
}
class Vertex<VertexType> { ... }
class Edge<EdgeType> { ... }
答案 0 :(得分:1)
根据您是使用自定义集合类型还是在创建AdjacencyList
的新实例时是否要指定它们,您可以使用类似的内容:
class Vertex<VertexType> { }
class Edge<EdgeType> { }
class AdjacencyList<VertexType, EdgeType> {
var vertices: [Vertex<VertexType>] = []
var edges: [Edge<EdgeType>] = []
}
let list = AdjacencyList<String, Int>()
list.vertices // [Vertex<String>]
list.edges // [Edge<Int>]
或者,如果您希望每次都能指定集合类型,则可以执行与此类似的操作(代码位于Swift 3中,因此VC.Iterator.Element
应为VC.Generator.Element
和{{1}如果您使用Swift 2,则变为Collection
CollectionType