收集几个Alamofire请求的所有回复

时间:2015-09-11 00:04:01

标签: ios swift alamofire

我正在尝试收集一些数组(供进一步使用)我连续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>
    }
}

1 个答案:

答案 0 :(得分:1)

您应该使用例如SwiftEventBus并将其与控制器类分开。当来自服务器的响应时,swiftEventBus会将事件传递给MainThread(控制器)。只有三种方法:

  • SwiftEventBus.post( “名称”)
  • SwiftEventBus.onMainThread(...)
  • SwiftEventBus.on(...)

你还需要回复吗? 如果是,我会延长我的回复!