如何在Swift中表达约束泛型函数的类型?

点数

我可以定义一个功能

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Swift 3中使用关联类型的参数调用泛型函数

如何在 Swift 泛型函数中创建正确类型的新对象?

如何编写枚举类型的Swift泛型函数?

如何在Swift中调用歧义泛型函数?

如何在泛型函数上使用正确的类型函数?

Swift:检查泛型函数的返回类型

如何在UML中表示模板函数的类型约束

如何在Flow中使用相同泛型类型的值对泛型函数进行类型检查

如何为具有类型约束的泛型函数提供默认参数?

如何限制泛型函数的关联类型

如何推断泛型函数的返回类型

泛型函数子类型约束错误和混淆

将F#泛型函数约束为并集类型?

如何从Swift泛型函数捕获参数

泛型函数内部的Swift Equatable泛型类型比较

如何在没有泛型类型参数的情况下定义泛型函数?

如何在 Typescript 函数接口中约束泛型类型?

Java泛型函数:如何返回泛型类型

如何在泛型函数类型中具有可选参数类型?

如何在不知道类型的情况下从泛型函数调用函数?

如何在Swift中使用函数参数消除对该泛型函数的调用的歧义?

如何使用协议关联类型在Swift中编写泛型函数

TypeScript泛型函数的类型

泛型函数的返回类型

如何在 Typescript 中定义泛型函数类型;两种相似的方式?

如何在流中将类型参数显式传递给泛型函数?

如何在泛型函数中使用类型化 Scala Trait?

如何在TypeScript的泛型函数中使用有界类型?

Swift:关于泛型函数和关联类型的问题