首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速泛型-不能显式地专门化泛型函数

快速泛型-不能显式地专门化泛型函数
EN

Stack Overflow用户
提问于 2020-05-01 18:21:33
回答 1查看 612关注 0票数 0

我试图调用一个泛型函数,并得到以下错误:

不能显式地专门化泛型函数

我的代码:

代码语言:javascript
运行
复制
public func parse<T: Codable>(request: HTTPRequestProtocol,
                              completion: @escaping (T?) -> Void) {
          ///....
}

//

代码语言:javascript
运行
复制
parser.parse<Person>(request: request, onSuccess: { (codable)  in
         //Error: Cannot explicitly specialize a generic function
}

我怎么才能修好它?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-01 18:30:31

Swift中有这样一条规则,即不能显式地(使用<>s)说明泛型方法的泛型参数是什么。您必须给出类型推断引擎的线索,以便让它显示出泛型参数。在本例中,您可以注释闭包参数的类型,以便闭包具有一种(Person) -> Void类型。有了这些信息,编译器就可以计算出T的类型。

代码语言:javascript
运行
复制
parser.parse(request: request, onSuccess: { (codable: Person)  in ... }

在其他情况下,您可能需要接受T.Type类型的额外参数。例如,如果函数只接受类型参数,而不接受值参数:

代码语言:javascript
运行
复制
func foo<T>() { ... }

在这种情况下,您需要添加一个额外的参数:

代码语言:javascript
运行
复制
func foo<T>(_ type: T.Type) { ... }

以便您可以将其用作:

代码语言:javascript
运行
复制
foo(Person.self)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61548379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档