1.2.2 关联类型

在协议里定义的关联类型也可以用泛型来处理。我们定义一个协议,如下所示。

protocol HTNState {
    associatedtype StateType
    func add(_ item: StateType)
}

采用非泛型的实现,如下所示。

struct states: HTNState {
    typealias StateType = Int
    func add(_ item: Int) {
        //...
    }
}

采用泛型遵循协议,如下所示。

struct states<T>: HTNState {
    func add(_ item: T) {
        //...
    }
}

这样关联类型也能够享受泛型的好处了。