Swift访问函数的响应

时间:2017-11-15 01:11:07

标签: swift alamofire

我正在生成一个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方法。

1 个答案:

答案 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已经前进并执行下一行并完成。