【问题标题】:How to handle empty array response in iOS swift using alamofire如何使用 alamofire 在 iOS swift 中处理空数组响应
【发布时间】:2019-02-10 11:48:09
【问题描述】:

我正在使用 alamofire 进行服务集成。它有时只给出 [] 的空响应。在那个时候,应用程序由于空数组响应而崩溃。如何在 swift iOS 中处理该响应。

这是我的代码:

    let headers = ["Authorization" : "Bearer "+token,
                   "Content-Type": "application/json"]

Alamofire.request("http://sos.partnersbuddy.in/api/friend_request/received", method: .get, encoding: JSONEncoding.default, headers: headers).responseJSON { 响应 // print("请求(response.request)")

        print("RESPONSE \(String(describing: response.result.value))")
        print("RESPONSE \(response.result)")
        print("RESPONSE \(response)")

            var respVO:[RequestResvo] = Mapper<RequestResvo>().mapArray(JSONArray: response.result.value as! [[String : Any]])

            print(respVO)

            self.postID = respVO[0].id!

            if let result = response.result.value {
                let JSON = result as! NSArray
                print(JSON.value(forKey: "user"))

                let res = JSON.value(forKey: "user")
                let respVo = Mapper<SubRequestVo>().mapArray(JSONArray: res as! [[String : Any]])

                for (index, element) in (respVo.enumerated()) {
                    print(index)

                    self.nameArr.append(element.first_name!)
                    self.numberArr.append(element.mobile!)

                    print("nameArr\(self.nameArr)")                        
                    print("numberArr\(self.numberArr)")

                    DispatchQueue.main.async {
                        // update your UI and model objects here

                        self.mytableView.reloadData()
                        // SKActivityIndicator.dismiss()
                    }
                }
            }
    }

当应用程序由于空数组响应而崩溃时,如何处理这个空响应。如何在 swift iOS 中处理该响应。

【问题讨论】:

    标签: ios iphone swift


    【解决方案1】:

    您可以尝试将响应打印为字符串:

    在您的请求末尾添加它,如下所示:

    Alamofire.request(url, method: .get, encoding: JSONEncoding.default, headers: headers)
    .responseJSON { response in
    
    }.responseString { response in
        print(response)
    }
    

    【讨论】:

      【解决方案2】:

      看看你的代码,我会做这样的事情:

      Alamofire.request("http://sos.partnersbuddy.in/api/friend_request/received", method: .get, encoding: JSONEncoding.default, headers: headers).responseJSON { response in
      
              switch response.result {
              case .success(let json):
                  guard let array = json as? [[String : Any]] else {
                      // Handle error: your json response is not a [[String : Any]] as you were expecting
                  }
      
                  if array.count == 0 {
                      // Handle empty array response
                  }
      
                  var respVO:[RequestResvo] = Mapper<RequestResvo>().mapArray(JSONArray: response.result.value as! [[String : Any]])
      
                  print(respVO)
      
                  self.postID = respVO[0].id!
      
                  if let result = response.result.value {
                      let JSON = result as! NSArray
                      print(JSON.value(forKey: "user"))
      
                      let res = JSON.value(forKey: "user")
                      let respVo = Mapper<SubRequestVo>().mapArray(JSONArray: res as! [[String : Any]])
      
                      for (index, element) in (respVo.enumerated()) {
                          print(index)
      
                          self.nameArr.append(element.first_name!)
                          self.numberArr.append(element.mobile!)
      
                          print("nameArr\(self.nameArr)")
                          print("numberArr\(self.numberArr)")
      
                          DispatchQueue.main.async {
                              // update your UI and model objects here
      
                              self.mytableView.reloadData()
                              // SKActivityIndicator.dismiss()
                          }
                      }
                  }
              case .failure(let error):
                  // Handle response error
                  print(error)
              }
          }
      

      这让您可以处理响应结果和空数组情况。 提供有关您的响应 json 格式的更多信息,最好写下适合您问题的更精确的代码。

      【讨论】:

        【解决方案3】:

        由于发送带有空格的 URL,我从 alamofire 响应中得到了一个空的 json,其状态代码为零,并且失败。如果你有类似的东西,请确保使用带有允许字符的 url:

        var urlString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        

        【讨论】:

          猜你喜欢
          • 2020-12-02
          • 2014-11-15
          • 1970-01-01
          • 1970-01-01
          • 2020-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多