gpt4 book ai didi

generics - 不能显式特化泛型函数

转载 作者:IT王子 更新时间:2023-10-29 04:57:22 26 4
gpt4 key购买 nike

我对以下代码有疑问:

func generic1<T>(name : String){
}

func generic2<T>(name : String){
generic1<T>(name)
}

generic1(name) 导致编译器错误“无法显式特化通用函数”

有什么办法可以避免这个错误吗?我无法更改 generic1 函数的签名,因此它应该是 (String) -> Void

最佳答案

我也遇到了这个问题,我找到了解决方法。

这篇文章作者也有同样的问题

https://www.iphonelife.com/blog/31369/swift-programming-101-generics-practical-guide

所以问题似乎是,编译器需要以某种方式推断 T 的类型。但是不允许简单地使用泛型<类型>(params...)。

通常,编译器可以通过扫描参数类型来查找 T 的类型,因为在许多情况下这是使用 T 的地方。

在我的例子中有点不同,因为我的函数的返回类型是 T。在你的例子中,你似乎根本没有在你的函数中使用 T。我想您只是简化了示例代码。

所以我有以下功能

func getProperty<T>( propertyID : String ) -> T

例如

getProperty<Int>("countProperty")

编译器给我错误:

Cannot explicitly specialize a generic function

因此,要为编译器提供另一个信息源来推断 T 的类型,您必须显式声明保存返回值的变量的类型。

var value : Int = getProperty("countProperty")

这样编译器就知道 T 必须是一个整数。

所以我认为总的来说它只是意味着如果你指定一个泛型函数你必须至少在你的参数类型中使用 T 或作为返回类型。

关于generics - 不能显式特化泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27965439/

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