我正在尝试收集一些数组(供进一步使用)我连续ALAMOFIRE请求获得的一些数据。我知道有一个异步过程,我相信这就是为什么当我尝试打印出dataArray
时,它发生在Alamofire
请求结束之前,所以它总是空的(尝试1:请看代码) 。我还尝试在Alamofire
请求关闭时使用dispatch_async(尝试2:请参阅代码),有时它会打印出完整的数组,一式两份,永远不会按要求的顺序打印出来。您能否帮我找到正确的方法,这意味着,根据请求订单收集所有收集的信息,然后在适当的时候使用完成的dataArray?
import UIKit
import Alamofire
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var dataArray = [String]()
for var a = 4; a <= 9; a++ {
request(.GET, "http://api.fixer.io/2015-09-0\(a)?symbols=USD", parameters: nil, encoding: .JSON)
.responseJSON {
(request, response, json, error) -> Void in
let photoInfos = json as! Dictionary<String, NSObject>
let date = photoInfos["date"]! as! String
dataArray.append(date)
println("request: \(request)")
println("response: \(response?.statusCode)")
println("json: \(json)")
println("error: \(error)")
//attempt 2 <begin>
dispatch_async(dispatch_get_main_queue()) {
println(dataArray) // attempt 2
}
//attempt 2 <end>
}
}
//attempt 1 <begin>
println(dataArray)
//attempt 1 <end>
}
}
答案 0 :(得分:1)
您应该使用例如SwiftEventBus并将其与控制器类分开。当来自服务器的响应时,swiftEventBus会将事件传递给MainThread(控制器)。只有三种方法:
你还需要回复吗? 如果是,我会延长我的回复!