如何应对alamofire的异步?

时间:2018-01-20 09:06:23

标签: swift alamofire swifty-json

我正在尝试保存从JSON fire获得的数据,但是由于Alamofire的异步性质,我不能立即得到我需要的数据,但只有当我再次点击tableviewcell时(并且数据也是错误的)

我想知道我应该在这做什么,以便当我点击tableviewcell时它将获得我需要的数据(而不是空数组)

这是我的代码:

class CurrencyExchangeViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {

    let exchange = currencyExchangeModel()
    var past30DaysDateValueToPass = [String]()
    var past30DaysPriceValueToPass = [Double]()
    var valueToPass = ""



 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let indexPath = tableView.indexPathForSelectedRow!
    let currentCell = tableView.cellForRow(at: indexPath) as? CurrencyExchangeTableViewCell
    valueToPass = Array(self.exchange.currencyToGetExchangesDictionary.keys)[indexPath.row]
    self.getPastData(currency: valueToPass)
    performSegue(withIdentifier: "currencyHistorySegue", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "currencyHistorySegue") {
        var viewController = segue.destination as? CurrencyHistoricalDataViewController
        viewController?.historicalCurrency = valueToPass
        viewController?.past30DaysPrice = self.exchange.currencyPast30DaysPriceArray
        viewController?.past30DaysDate = self.exchange.currencyPast30DaysDatesArray
    }
}

    func getPastData(currency: String){
    Alamofire.request("https://api.coindesk.com/v1/bpi/historical/close.json?currency=\(currency)").responseJSON{ (responseData) in
        if responseData.result.value != nil {
            let responseJSON = JSON(responseData.result.value)["bpi"].dictionaryObject
            self.exchange.currencyPast30DaysDatesArray = Array(responseJSON!.keys)
            self.exchange.currencyPast30DaysPriceArray = Array(responseJSON!.values) as! [Double]
        }
    }

    }
}

1 个答案:

答案 0 :(得分:0)

如果您希望在从Alamofire获取数据后执行performSegue,请删除

 performSegue(withIdentifier: "currencyHistorySegue", sender: self)

这一行来自didselect并放置在getPastData

func getPastData(currency: String){
    Alamofire.request("https://api.coindesk.com/v1/bpi/historical/close.json?currency=\(currency)").responseJSON{ (responseData) in
        if responseData.result.value != nil {
            let responseJSON = JSON(responseData.result.value)["bpi"].dictionaryObject
            self.exchange.currencyPast30DaysDatesArray = Array(responseJSON!.keys)
            self.exchange.currencyPast30DaysPriceArray = Array(responseJSON!.values) as! [Double]
          performSegue(withIdentifier: "currencyHistorySegue", sender: self)
     }
  }

这会有所帮助。