2016-04-25 5 views
3

Ich habe eine statische Funktion unterhalb, die eine GET Anfrage durchführen und dann versuchen, die Daten in was auch immer <T> ist zu analysieren.Generic Parameter 'T' konnte nicht mit Schließungen

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

Meine Frage ist, wie nenne ich es?

Wenn ich es so zu nennen versuchen, unter ich den Fehler von 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 } 

Von umsah Funktionen wie diese in der Regel ihre Art aus der Variablen bekommen bekommen, dass die Funktion unten wie das Beispiel nur zurückgibt.

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

jedoch als das Ergebnis in einem Verschluss kommt zurück, wie kann ich festlegen, was <T> ist?

Dank


bearbeiten

Nachfolgend finden Sie einige Beispielcode, der das gleiche Problem darstellt.

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

zeigen uns die Umsetzung der 'get' Funktion –

+0

@RMenke ich ein Beispiel hinzugefügt haben, die das gleiche Problem wie die get-Methode zeigt andere Dinge hat da drin, die nicht auf diese Frage wie Parameter-Codierung verwandt sind ect. –

Antwort

4

Sie müssen den Typ beim Aufruf der Funktion explizit angeben. Wenn Sie String erwarten, dann rufen Sie es mit String type auf.

MyClass.myFunction { (response: String) in 

} 
+0

Das hat funktioniert. Vielen Dank. –

Verwandte Themen