有Contextual type for closure argument list expects 1 argument, but 4 were specified 但我的例子有额外的错误检查......我该怎么办/我应该改变什么?我想我应该把处理程序放在最后...... 我怎么能优化它?是否有必要进行“错误”检查?
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)
}
}
}
}
答案 0 :(得分:1)
您正在使用Alamofire的更新版本,并且在Alamofire版本3中使用此语法对我不起作用并给了我同样的错误。 我想你可以像我一样在这里找到答案。
使用Alamofire版本3.3.1:
由于Alamofire版本3和语法更改旧代码不起作用。 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()
}
}
}
}
答案 1 :(得分:1)
就像这样使用
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)
}
使用单个参数