2015-09-11 52 views
1

我想收集一些數據(供進一步使用),這些數據與連續的ALAMOFIRE請求一起獲得。我知道這是一個異步過程,我相信這就是爲什麼當我嘗試打印dataArray時,它發生在Alamofire請求結束之前,因此它總是空的(嘗試1:請參閱代碼)。我也嘗試在Alamofire請求關閉(嘗試2:請參閱代碼)上使用dispatch_async,有時它會重複打印整個數組,並且從不按請求的順序打印。您能否幫我找到正確的方法來做到這一點,也就是說,根據請求順序收集所有收集的信息,然後在適當的時候使用完成的dataArray?收集幾個Alamofire請求的所有響應

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

您應該使用例如SwiftEventBus並將其與控制器類分開。當來自服務器的響應來自swiftEventBus將傳遞一個事件給MainThread(控制器)。只是三種方法:

  • SwiftEventBus.post( 「名稱」)
  • SwiftEventBus.onMainThread(...)
  • SwiftEventBus.on(...)

你還需要一個迴應? 如果是,我會延長我的迴應!