上下文闭包类型'Response <anyobject,nserror =“”> - &gt; Void'期望1个参数,但4个用于封闭体

时间:2016-05-17 01:14:13

标签: ios xcode swift2 alamofire

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)
            }
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

您正在使用Alamofire的更新版本,并且在Alamofire版本3中使用此语法对我不起作用并给了我同样的错误。 我想你可以像我一样在这里找到答案。

Link

使用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)
}
  

使用单个参数