swift - 快速发送http请求

标签 swift http request

我试图解决http请求的问题,因为我几乎无法理解所有关于同步和异步方法的知识。 我只是想知道如何让编译器等待开始的http请求完成然后才继续执行?

例如,我需要获取一些页面,解析数据并将其发布到另一个页面。但是,当首先执行发布从第一个请求解析的数据的请求,然后才执行解析数据的请求时 - 我有一个很大的屁股。

最佳答案

您应该避免将同步网络请求视为瘟疫。它有两个主要问题:

  • 如果不是从不同的线程调用,该请求会阻塞您的 UI,这对于高质量的应用程序来说是大忌(嗯,对于任何应用程序来说都是如此)
  • 除非该请求本身出错,否则无法取消该请求

我建议您使用一些编写良好的网络请求库,例如 AlamofireAFNetworking 。对于 Swift 和您想要完成的任务,我推荐 Alamofire,因为它更容易使用,并且涵盖了您需要的所有基本内容。

您可以执行如下基本请求:

// Perform GET request
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["key": "value"])
         .response { request, response, data, error in

              // Do something with response or error
              println(response)
              println(error)
          }

现在,对于您的问题,您始终可以阻止 UI 直到网络操作完成,无论是推迟 PerformSegue,还是简单地禁止“下一步”按钮直到获得响应,或者简单地通过使用进度条/微调器覆盖 View ,例如使用 SVProgressHUD library 。结合起来,你可以这样做:

// Show progress HUD. This disables user interaction by default
SVProgressHUD.show()

// Perform GET request
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["key": "value"])
         .response { request, response, data, error in

              // Do something with response or error
              println(response)
              println(error)

              // Hide progress to enable user interaction again
              SVProgressHUD.dismiss()

              // Or optionally perform transition to different controller here
              self.performSegueWithIdentifier(identifier, sender: nil)
          }

希望对你有帮助!

关于swift - 快速发送http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31987379/

相关文章:

iOS 测试套件 - 添加整个项目源进行测试

swift - 未从相关实体 swift 调用部分更新事件

ios - 使用 WebRTC 的视频流和广播

Delphi indy 流式 Http 服务器

ruby - 在 Sinatra 中处理分块请求

http - Ionic2 中的多个 $http 请求

ios - 谷歌驱动器 API : Insufficient Permission iOS

javascript - 不能一起执行的功能

javascript - Cypress : How can we write GET request in with bearer token in cypress?

mysql - 使用命令行终端连接到 Azure MySQL 服务器时出错