使用Swift 4从函数返回Alamofire请求的JSON结果

时间:2018-01-19 21:55:36

标签: ios arrays alamofire swift4

我有一个从alamofire请求返回JSON结果的函数。最初的想法是从JSON结果中检索其中一个值并将它们存储在数组中,但每次我尝试返回JSON结果或填充的int数组时,我会在函数末尾得到一个空结果。请求是:

      func getSeats()-> JSON{
       var json : JSON = JSON()
       Alamofire.request(url , method: .get)
              .responseJSON{
                    response in
                    switch response.result {
                    case .success:
                            json = JSON(response.result.value!)
                    case .failure:
                 KRProgressHUD.showError(withMessage: "Could not retrieve reserved seats")
                    }
            }
           return json
        }

最初,看看AlamoFire文档,我尝试使用从json结果返回数组的选项,所以我修改了我的代码:

 func getSeats()-> [Int]{
   var json : JSON = JSON()
   Alamofire.request(url , method: .get)
          .responseJSON{
                response in
                switch response.result {
                case .success:
                        json = JSON(response.result.value!)
                case .failure:
             KRProgressHUD.showError(withMessage: "Could not retrieve reserved seats")
                }
        }
       return json.arrayValue.map { $0["seat_no"].intValue }
    }

但是这也返回了一个空数组,这就是我必须更改函数的原因。我收到的JSON格式如下:

 [
{
    "id": 1,
    "bus_id": 11,
    "seat_no": 6,
    "arrived_at": "2018-01-16 20:58:57"
},
{
    "id": 2,
    "bus_id": 11,
    "seat_no": 27,
    "arrived_at": "2018-01-16 21:40:29"
}

我对Swift很新,这让我永远理解并解决它。

1 个答案:

答案 0 :(得分:0)

您的函数在实际设置为json之前返回空JSON(response.result.value!)变量。你不应该像那样返回json,或者根本不应该返回任何东西。你的函数应该采用一个闭包参数,而闭包参数本身可以采用你的json参数。然后,当您从服务器获得响应时,您可以执行闭包,并将解析的json传递给它。

我建议学习更多有关同步和异步编程的知识。默认情况下,网络是异步的,您请求的数据在服务器的响应中实际返回需要一些时间。

进行研究基本的异步编程,以及与闭包和完成块的联网。任何基本的iOS网络教程都将涵盖这些内容。