我有一个从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很新,这让我永远理解并解决它。
答案 0 :(得分:0)
您的函数在实际设置为json
之前返回空JSON(response.result.value!)
变量。你不应该像那样返回json,或者根本不应该返回任何东西。你的函数应该采用一个闭包参数,而闭包参数本身可以采用你的json参数。然后,当您从服务器获得响应时,您可以执行闭包,并将解析的json传递给它。
我建议学习更多有关同步和异步编程的知识。默认情况下,网络是异步的,您请求的数据在服务器的响应中实际返回需要一些时间。
进行研究基本的异步编程,以及与闭包和完成块的联网。任何基本的iOS网络教程都将涵盖这些内容。