2016-04-25 2 views
3

У меня есть статическая функция ниже, которая будет выполнять запрос GET, а затем попытаться проанализировать данные во всех <T>.Общий параметр '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) 

Однако, как результат возвращается в затворе, как указать, что <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

показывают нам реализацию 'get' функции –

+0

@RMenke я добавил пример, который показывает тот же вопрос, как метод GET имеет в там другие вещи, которые не связаны с этим вопросом, таких как кодирование параметров ЭСТ. –

ответ

4

Вам нужно явно указать тип при вызове функции. Если вы ожидаете String, то вызовите его со строковым типом.

MyClass.myFunction { (response: String) in 

} 
+0

Это сработало. Благодарю. –

Смежные вопросы