如何在下载数据后仅跟进功能

时间:2015-12-04 06:36:43

标签: ios swift

我一直试图在其他帖子中寻找答案但是没有成功。我试图找到一种方法来保持我的代码处理,直到它从外部数据库下载某个信息(usd)。

例如:

class func getExchange() {
    Alamofire.request(.GET, URL).validate().responseJSON { (_, _, result) in
        switch result {
        case .Success(let data):
            let json = JSON(data)
            let usd = json["USD"]["last"].float
            print("USD Exchange Rate is: \(usd!)")
            NSUserDefaults.standardUserDefaults().setFloat(usd!, forKey: "currency")
            ViewController().reloadCurrency()
        case .Failure(_, let error):
            print(error)
        }
    }
}

在这个区块中,我需要获得" usd"的价值。在我运行函数ViewController()。reloadCurrency()

之前

我怎么能这样做?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

异步编程的概念起初有点难以掌握。会发生什么是你的闭包(或块)实际上是在后台执行的。因此,要获取主线程中的数据,您必须通过dispatch_async(dispatch_get_main_queue()) { }转到该主线程 在你的情况下,它应该是这样的:

 dispatch_async(dispatch_get_main_queue()) {  
    print("USD Exchange Rate is: \(usd!)")
    NSUserDefaults.standardUserDefaults().setFloat(usd!, forKey: "currency")
    ViewController().reloadCurrency()
    self.handleComplete(dataReturn: usd)
 }

答案 1 :(得分:-1)

我真的不明白你的问题。代码运行时返回

中的块
  

Alamofire.request

这意味着下载完了 无论如何,试试:

     static func getExchange(handleComplete:(dataReturn:AnyObject?)->()) {
    Alamofire.request(.GET, URL).validate().responseJSON { (_, _, result) in
        switch result {
        case .Success(let data):
            let json = JSON(data)
            let usd = json["USD"]["last"].float
            print("USD Exchange Rate is: \(usd!)")
            handleComplete(dataReturn: usd)
        case .Failure(_, let error):
            print(error)
        }
    }
}

并使用:

       Until.getExchange { (dataReturn) -> () in
            if let data = dataReturn as? typeOfData{
                // do s.t
                //ex : 
                NSUserDefaults.standardUserDefaults().setFloat(usd!, forKey: "currency")
                ViewController().reloadCurrency()
            }
        }