【问题标题】:Contextual closure type 'Response<AnyObject, NSError> -> Void' expects 1 argument, but 4 were used in closure body上下文闭包类型 'Response<AnyObject, NSError> -> Void' 需要 1 个参数,但在闭包主体中使用了 4 个
【发布时间】:2016-05-17 01:14:12
【问题描述】:

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

【问题讨论】:

    标签: ios xcode swift2 alamofire


    【解决方案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)
    }
    

    使用单个参数

    【讨论】:

      【解决方案2】:

      您正在使用更新版本的 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()
              }
          }
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 2018-03-08
        相关资源
        最近更新 更多