我可以定义一个功能
func myGenericFunc<A: SomeProtocol>(_ a: A) -> A { ... }
现在,我想输入一个变量来完全容纳这种功能,但是我发现我无法拼写该类型:
let f: (SomeProtocol) -> SomeProtocol // doesn't express the genericity
let f: <A: SomeProtocol>(A) -> A // non-existent syntax
有什么办法可以直接表达出来吗?
请注意,特别是我想f
给仍然是通用的:它应该接受任何SomeProtocol
构象(所以没有事先固定泛型类型参数)。换句话说:我可以做的任何事情我也myGenericFunc
希望可以做f
。
快速的答案是“否”,您不能使用单个变量来保存不同的函数实现。变量需要保存一些具体的东西,以便编译器分配适当的内存布局,而不能使用通用构造来做到这一点。
如果需要保留其他闭包引用,则可以使用通用类型别名:
typealias MyGenericFunction<T: SomeProtocol> = (T) -> T
var f1: MyGenericFunction<SomeConformerType> // expanded to (SomeConformerType) -> SomeConformerType
var f2: MyGenericFunction<AnotherConformerType> // expanded to (AnotherConformerType) -> AnotherConformerType
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句