我一直试图在其他帖子中寻找答案但是没有成功。我试图找到一种方法来保持我的代码处理,直到它从外部数据库下载某个信息(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()
之前我怎么能这样做?
提前感谢您的帮助!
答案 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()
}
}