【问题标题】:Generic parameter 'T' could not be inferred with closures无法用闭包推断通用参数“T”
【发布时间】:2016-04-25 11:52:03
【问题描述】:

我在下面有一个静态函数,它将执行 GET 请求,然后尝试将数据解析为 <T> 的任何内容。

public static func get<T>(url: NSURL, paramaters: [String : AnyObject]?, paramaterEncoding: ParameterEncoding, compleation:(response: Response<T>) -> Void)

我的问题是如何称呼它?

如果我尝试像下面这样调用它,我会收到 Cannot explicitly specialize a generic function 的错误

let url = NSURL(string: "http://g.co")!
typealias JsonResponse = [String : AnyObject]
Notwork.get<JsonResponse>(url, paramaters: nil, paramaterEncoding: ParameterEncoding.json) { (response) in }

通过查看这些函数,通常可以从函数返回的变量中获取它们的类型,就像下面的示例一样。

let result: Response<JsonResponse> = Notwork.get(url, paramaters: nil, paramaterEncoding: .json)

但是,由于结果以闭包形式返回,我如何指定 &lt;T&gt; 是什么?

谢谢


编辑

下面是一些描述相同问题的示例代码。

import Foundation

struct My {
    static func function<T>(compleation:(response: T) -> Void) {

        let apiResponse = ["some" : "value"]

        guard let value = apiResponse as? T else {
            return
        }

        compleation(response: value)
    }
}

//Gives error "Generic parameter 'T' could not be inferred"
My.function { (response) in

}

【问题讨论】:

  • 向我们展示get函数的实现
  • @RMenke 我添加了一个示例,该示例显示了与 get 方法相同的问题,其中包含与此问题无关的其他内容,例如参数编码等。

标签: swift generics


【解决方案1】:

您需要在调用函数时明确告知类型。如果您期望使用 String,请使用 String 类型调用它。

MyClass.myFunction { (response: String) in

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多