我正在生成一个GET请求,它以这种格式给出了字典中数组的JSON对象:
Array<Dictionary<String,String>>
我有一个班级:
class foodMenu: UITableViewController{
var jsonData:Array<Dictionary<String,String>>! // Here is set an empty global variable(Not sure if I am doing this right either)
func getFoodRequest(){
Alamofire.request("http://127.0.0.1:5000/get_food").responseJSON {
response in
print("This response", response.result)
let result = response.result.value
self.jsonData = result as! Array<Dictionary<String,String>>
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
getFoodRequest()
return jsonData!.count
}
}
jsonData返回nil。我的目标是拥有一个jsonData
数组,以便我可以使用.count方法。
答案 0 :(得分:1)
问题是你正在尝试同步网络,而且你不能。实际上,你是异步网络,这是正确的,但你忘了网络是异步的。
让我们看看您的代码:
func getFoodRequest(){
Alamofire.request("http://127.0.0.1:5000/get_food").responseJSON {
response in
let result = response.result.value
self.jsonData = result as! Array<Dictionary<String,String>> // B
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
getFoodRequest() // A
return jsonData!.count // C
}
看看我补充说的那封信。您似乎认为代码按照A,B,C的顺序执行。它没有。它按照A,C,B的顺序执行。这是因为获取您的回复需要时间并在后台线程上发生,同时您的numberOfRowsInSection
已经前进并执行下一行并完成。