泛型参数'T'无法通过闭包推断。

10
我下面有一个静态函数,将执行一个 GET 请求,然后尝试将数据解析为任何 <T>
public static func get<T>(url: NSURL, paramaters: [String : AnyObject]?, paramaterEncoding: ParameterEncoding, compleation:(response: Response<T>) -> Void)

我的问题是如何调用它?
如果我尝试像下面这样调用它,就会出现“无法明确特化通用函数”的错误。
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)

然而,由于结果以闭包形式返回,我该如何指定<T>是什么?

谢谢。


编辑

以下是一些示例代码,描述了同样的问题。

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 函数的实现。 - R Menke
@RMenke 我添加了一个示例,展示了与get方法相同的问题,因为其中还有其他与此问题无关的内容,例如参数编码等。 - Ste Prescott
1个回答

30

在调用函数时,您需要显式地指定类型。如果您期望的是字符串,则应使用字符串类型来调用它。

MyClass.myFunction { (response: String) in

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接