使用 Alamofire 的 Http 请求

Posted

技术标签:

【中文标题】使用 Alamofire 的 Http 请求【英文标题】:Http request using Alamofire 【发布时间】:2016-03-31 08:56:33 【问题描述】:

我正在使用Alamofire 在我的应用程序中发送 HTTP 请求。我正在使用 TabBarViewController,在第一个视图的 ViewDidLoad 中,我发送了一个请求。同样在 ViewWillDisappear 中,我发送了另一个请求。但是,当我更改选项卡时,我发现它的行为出乎意料。

func sendHttpCommand(parameter: NSDictionary) 
    Alamofire.request(.GET, URL, parameters: (parameter as! [String: AnyObject]))
             .response 
                 request, response, data, error in
                 print(request)
             


viewDidLoad() 
    let dict: NSDictionary = ["value": 0]
    sendHttpCommand(dict)


viewWillDisappear(animated: Bool) 
    let dict: NSDictionary = ["value": 1]
    sendHttpCommand(dict)

当我切换标签时,NORMAL CASE,我的控制台会打印出来

Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=1)

但是,当我足够快切换标签时,我的控制台会打印出来

Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=0)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=1)
Optional(NSMutableURLRequest URL: xxxxx/value=0)

有什么想法吗?

【问题讨论】:

【参考方案1】:

alamofire 请求是异步执行的。

阅读此处以了解异步和同步: Difference between dispatch_async and dispatch_sync on serial queue?

当您更改标签并且请求未完成时,您可以取消您的 alamofire 请求。为此,您需要一个 Alamofire 管理器。

【讨论】:

如何按顺序提出请求?我尝试使用dispatch_group。但是,我似乎没有工作。 link 您必须在响应处理程序中调用下一个请求。或者使用委托并在您的响应处理程序中触发它以启动下一个请求。如果用户更改标签***.com/questions/26305707/…,您也可以取消您的请求

以上是关于使用 Alamofire 的 Http 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift4 中使用 Rxalamofire 发送 URL 请求

使用 Alamofire 的 Http 请求

如何使用 Alamofire 为 http 请求编写单元测试?

如何使用 alamofire 实现 put http 请求

请求的资源不支持使用 Alamofire 的 http 方法“T”(或“ST”)

在操场上使用 Alamofire 发出 http 请求的延迟