2016-05-17 3 views
0

Es gibt Contextual type for closure argument list expects 1 argument, but 4 were specified Aber mein Beispiel mit zusätzlichen Fehlerprüfungen ... Was soll ich tun/Was soll ich tun? Veränderung? Ich denke, ich sollte Handler am Ende setzen ... Wie kann ich es optimieren? Ist es notwendig für "Fehler" zu prüfen?Kontextschließungsart 'Antwort <AnyObject, NSError> -> Void' erwartet 1 Argument, aber 4 wurden im Schließungskörper verwendet

class func getUserMarks(_userID: String, handler: (json: JSON) ->()) { 
    // set request params 
    Constants.userMarks.params["id"] = _userID 
    // send request 
    Alamofire.request(.GET, Constants.userMarks.url, parameters: Constants.userMarks.params) 
    .responseJSON() { 
     (_, _, data, error) in 
     // if no errors 
     if error == nil { 
      // check for coming data 
      if let data: AnyObject = data { 
       // convert to json and return back 
       handler(json: JSON(data)) 
      } else { 
       handler(json: JSON(["serverError": true])) 
      } 
     } else { 
      self.errorCounter++ 
      if self.errorCounter > 3 { 
       self.errorCounter = 0 
       handler(json: JSON(["serverError": true])) 
      } else { 
       self.getUserMarks(_userID: _userID, handler: handler) 
      } 
     } 
    } 
} 

enter image description here

Antwort

1

verwenden wie diese

Alamofire.request(.POST, Constants.userMarks.url, parameters: Constants.userMarks.params).responseJSON { response in 
    let json = JSON(response.data!) 
    let token = json["token"].string 
    response(token: token) 
} 

Verwenden Argument

1

Sie verwenden eine aktualisierte Version von Alamofire und mit dieser Syntax mit Alamofire Version 3 nicht für mich arbeiten und gab mir den gleichen Fehler. Ich denke, Sie können hier antworten, wie ich es tat.

Link

Mit Alamofire Version 3.3.1:

Aufgrund Alamofire Version 3 und Syntax ändern alten Code nicht funktioniert. You can check Alamofire 3.0 Migration Guide.

override func viewDidLoad() { 
super.viewDidLoad() 
Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { (responseData) -> Void in 
    if((responseData.result.value) != nil) { 
     let swiftyJsonVar = JSON(responseData.result.value!) 

     if let resData = swiftyJsonVar["contacts"].arrayObject { 
      self.arrRes = resData as! [[String:AnyObject]] 
     } 
     if self.arrRes.count > 0 { 
      self.tblJSON.reloadData() 
     } 
    } 
} 

}

Verwandte Themen