Swift:与where约束关联的类型

时间:2018-07-25 21:44:19

标签: swift generics protocols

我想在协议中使用associatedtype,并使用一种带有where的方法来将关联类型的类型约束为与协议相同,这有可能吗?

protocol Transformable {
    associatedtype TransformType
    func transform() -> TransformType
}

func repeatTransform<T: Transformable>(_ transformable: T) where T.TransformType: Transformable, T.TransformType == T.Type {
    let t1 = transformable.transform()
    let t2 = t1.transform()
}

我知道了

  

相同类型的约束类型'T.Type'不符合必需的协议'Transformable'

谢谢!

1 个答案:

答案 0 :(得分:0)

T已经是类型,您不想在约束中执行T.TypeT.TransformType: Transformable也是多余的,因此您可以删除它。

应该是:

func repeatTransform<T: Transformable>(_ transformable: T) where T.TransformType == T