2015-10-04 3 views
8

Kann Wert des Nichtfunktionstyps 'NSHTTPURLResponse' nicht aufrufen? enter image description hereKann den Wert des Nicht-Funktionstyps 'NSHTTPURLResponse' nicht aufrufen Alamofire ObjectMapper

Kann mir bitte jemand hier helfen? Hier

ist der Code

public func responseObject<T: Mappable>(queue: dispatch_queue_t?, keyPath: String?, completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, AnyObject?, ErrorType?) -> Void) -> Self { 

    return response(queue: queue, responseSerializer: Request.JSONResponseSerializer(options: NSJSONReadingOptions.AllowFragments)) { request, response, result in 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
      let parsedObject = Mapper<T>().map(keyPath != nil ? result.value?[keyPath!] : result.value) 

      dispatch_async(queue ?? dispatch_get_main_queue()) { 
       completionHandler(self.request!, self.response, parsedObject, result.value ?? result.data, result.error) 
      } 
     } 
    } 
} 

Meine schlecht, ich nicht den Rückgabetyp von Alamofire bemerkt haben 2,0,

Dieser fixiert ist, aktualisierte Code ist hier

public func responseObject<T: Mappable>(queue: dispatch_queue_t?, keyPath: String?, completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, AnyObject?, ErrorType?) -> Void) -> Self { 

let serializer = Request.JSONResponseSerializer(options: NSJSONReadingOptions.AllowFragments) 

return response(queue: queue, responseSerializer: serializer) { (Response) -> Void in 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
      let parsedObject = Mapper<T>().map(keyPath != nil ? Response.result.value?[keyPath!] : Response.result.value) 



      dispatch_async(queue ?? dispatch_get_main_queue()) { 
       completionHandler(self.request!, self.response, parsedObject, Response.result.value ?? Response.result.value, Response.result.error) 
      } 
     } 

    } 
} 
+0

Ich habe versucht mit dem Alamofire 2.0 Response Serializer, dies gibt auch den gleichen Fehler – Abh

+0

Bitte notieren Sie sich Ihren Code, nicht einen Screenshot. – SJuan76

+0

Ich habe den Code hinzugefügt. Irgendeine Idee? – Abh

Antwort

3

Dies hatte Fehler mich selbst und brauchte eine Weile, um herauszufinden, warum es vorkam. Wenn die Parameter für den Methodenaufruf response() nicht mit Methodendeklarationen übereinstimmen, wird davon ausgegangen, dass der Code sich auf die response-Eigenschaft bezieht, a NSHTTPURLResponse. Da es die Eigenschaft gibt, die den Namen der Methode überschattet, kann swift nicht mit Fehlern behilflich sein, die angeben, welcher Parameter ein Problem ist.

In meinem Fall wurde completionHandler wegen seine Parameter nicht übereinstimmte. Hinweis, es ist der Beispielcode, den ich .response { response in ... } gesehen habe, das ist problematisch. Es gibt keine response Methode, die eine "Antwort in" Schließung wie es für die responseString, responseJSON, etc. Methoden gibt.

Das sagte, Abh, ich kann nicht sagen, was das genaue Problem mit Ihrem Code ist.

+0

Wie hast du das gelöst? – dejavu89

+1

Ich reparierte die Argumente zu "completionHandler" in meiner Verwendung der 'Antwort (Warteschlange Warteschlange: dispatch_queue_t? = Nil, completionHandler: ...) -> Self' Methode, Ändern von' .Response {Antwort in ...} 'as kopiert von Beispielcode zu '.response {_, _, _, Fehler in ...}' –

+0

Danke für Ihre Antwort, aber es war mir nicht möglich, meinen Code hier zu posten, also stellte ich eine neue Frage. Es sieht so aus, als ob Sie es beantworten können, bitte helfen Sie und ich werde gerne Ihre Antwort akzeptieren, wenn es hilft http://stackoverflow.com/questions/39838463/alamofire-error-after-updating-to-latest-version – dejavu89

0

Sie müssen Ihre CompletionHandler als @escaping markieren.

Verwandte Themen