【问题标题】:Swift generics - Cannot explicitly specialize a generic functionSwift 泛型 - 无法显式特化泛型函数
【发布时间】:2020-05-01 18:21:33
【问题描述】:

我正在尝试调用通用函数,但出现此错误:

无法显式特化泛型函数

我的代码:

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
}

我该如何解决? 谢谢

【问题讨论】:

    标签: ios swift generics


    【解决方案1】:

    在 Swift 中有一条规则,你不能明确地说(使用&lt;&gt;s)泛型方法的泛型参数是什么。您必须为类型推理引擎提供线索,让 找出泛型参数。在这种情况下,可以注解闭包参数的类型,使闭包的类型为(Person) -&gt; Void。有了这些信息,编译器就可以判断出T的类型了。

    parser.parse(request: request, onSuccess: { (codable: Person)  in ... }
    

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

    func foo<T>() { ... }
    

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

    func foo<T>(_ type: T.Type) { ... }
    

    以便您可以将其用作:

    foo(Person.self)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多