如何为泛型类指定泛型集合类型?

时间:2016-07-03 21:07:46

标签: swift generics

假设我正在创建一个泛型类,我也想在其中创建通用成员也存储在泛型中的集合。这样做的正确语法是什么?为了试图了解我想要做的事情,最佳猜测如下:

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> { ... }

1 个答案:

答案 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