我在下面有一个静态函数,它将执行GET
请求,然后尝试将数据解析为<T>
。{/ p>
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)
然而,当结果返回到闭包中时,如何指定<T>
是什么?
由于
下面是一些描述相同问题的示例代码。
import Foundation
struct MyClass {
static func myFunction<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"
MyClass.myFunction { (response) in
}
答案 0 :(得分:7)
调用函数时需要明确告诉类型。如果您期望String,则使用String类型调用它。
MyClass.myFunction { (response: String) in
}