我试图调用一个泛型函数,并得到以下错误:
不能显式地专门化泛型函数
我的代码:
public func parse<T: Codable>(request: HTTPRequestProtocol,
completion: @escaping (T?) -> Void) {
///....
}
//
parser.parse<Person>(request: request, onSuccess: { (codable) in
//Error: Cannot explicitly specialize a generic function
}
我怎么才能修好它?谢谢
发布于 2020-05-01 18:30:31
Swift中有这样一条规则,即不能显式地(使用<>
s)说明泛型方法的泛型参数是什么。您必须给出类型推断引擎的线索,以便让它显示出泛型参数。在本例中,您可以注释闭包参数的类型,以便闭包具有一种(Person) -> Void
类型。有了这些信息,编译器就可以计算出T
的类型。
parser.parse(request: request, onSuccess: { (codable: Person) in ... }
在其他情况下,您可能需要接受T.Type
类型的额外参数。例如,如果函数只接受类型参数,而不接受值参数:
func foo<T>() { ... }
在这种情况下,您需要添加一个额外的参数:
func foo<T>(_ type: T.Type) { ... }
以便您可以将其用作:
foo(Person.self)
https://stackoverflow.com/questions/61548379
复制相似问题