我想在协议中使用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'
谢谢!
答案 0 :(得分:0)
T
已经是类型,您不想在约束中执行T.Type
。 T.TransformType: Transformable
也是多余的,因此您可以删除它。
应该是:
func repeatTransform<T: Transformable>(_ transformable: T) where T.TransformType == T