for循环中的Swift异步HTTP调用

时间:2018-02-01 01:34:59

标签: swift loops http asynchronous alamofire

我应该如何处理for-loop中的异步HTTP调用?

我正在使用Alamofire的SessionManager,因为我需要在循环迭代期间维护会话。因此,我认为我不能使用共享会话管理器SessionManager.default

但是,如果我每次都要创建一个新的SessionManager,我的请求将被取消finished with error - code: -999。我想到的假设是因为SessionManager从内存中释放,因此它被取消了。

我该如何处理?我觉得做同步调用会更好。但是没有简单的方法可以与Alamofire进行同步HTTP调用。我不介意使用不同的图书馆。

其他一些信息:

  • NSAllowsArbitraryLoads在info.plist中设置为true。
  • 我的应用程序需要嵌套的api调用,其中HTTP完成 呼叫触发另一个,同时仍然使用相同的会话。

控制器类

class CheckinController {
    private let sessionManager = SessionManager(configuration: URLSessionConfiguration.default)

    // status is an enum such as .connectionFailed and .success
    func checkin(id: String, password: String, completion: ( (status) -> Void)) {

        self.login(id, password, completion: { (status) in

            self.sessionManager.request(…).responseString(completionHandler: { (response) in
                // Check for response, then calls completion
                completion(status)
            })
        })
    }

    func login(id: String, password: String, completion: ( (status) -> Void)) {
        let params = [“id” : id, “pass”, password]
        self.sessionManager.request(LOGINURL, method: .post, parameters: params).responseString(completionHandler: { (response) in
            // Check for response, and then calls completion.
            …
            completion(someStatus)
        })
    }

}

用法:

for 0..x {
    CheckinController().checkin("someId", "somePassword", completion: { status in
        print(status)
    )}
}

0 个答案:

没有答案