ios - 收集几个 Alamofire 请求的所有响应

标签 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>
    }
}

最佳答案

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

  • SwiftEventBus.post("名称")
  • SwiftEventBus.onMainThread(...)
  • SwiftEventBus.on(...)

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

关于ios - 收集几个 Alamofire 请求的所有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513462/

相关文章:

ios - 错误域=NSPOSIXErrorDomain 代码=100 "Protocol error"

ios - 在 UIWebView 中显示 ".doc"& ".docx"

ios - 如何设置从特定日期起每 7、14、28 天重复一次的本地通知

ios - valueForKeyPath : @"@max.totalSteps", 的奇怪问题是 iOS 平台代码中的这个错误吗?

ios - 如何在 Xcode 中创建多部分表单或向导

arrays - Any 和 AnyObject 之间的 Swift 异常

ios - 使用 URL swift Alamofire 上传视频

swift - 错误 : Extra parameter in request i used Swift 4. 为什么我必须传递类型为 [String : Any]? 的参数

ios - 如何使用 NSPredicate 从 CoreData 中删除选定数量的行?

ios - [__NSArrayM intValue] : unrecognized selector sent to instance