gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:58:14 26 4
gpt4 key购买 nike

我可以定义一个函数

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 conformer(因此不修复通用类型参数提前)。换句话说:我可以用 myGenericFunc 做的任何事情我也想用 f 做。

最佳答案

快速回答是,您不能使用单个变量来保存不同的函数实现。一个变量需要保存一些具体的东西,以便编译器分配适当的内存布局,而它不能用一个通用的结构来做到这一点。

如果需要持有不同的闭包引用,可以使用泛型类型别名:

typealias MyGenericFunction<T: SomeProtocol> = (T) -> T

var f1: MyGenericFunction<SomeConformerType> // expanded to (SomeConformerType) -> SomeConformerType
var f2: MyGenericFunction<AnotherConformerType> // expanded to (AnotherConformerType) -> AnotherConformerType

关于swift - 如何在 Swift 中表达约束泛型函数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com