我试图解决http请求的问题,因为我几乎无法理解所有关于同步和异步方法的知识。 我只是想知道如何让编译器等待开始的http请求完成然后才继续执行?
例如,我需要获取一些页面,解析数据并将其发布到另一个页面。但是,当首先执行发布从第一个请求解析的数据的请求,然后才执行解析数据的请求时 - 我有一个很大的屁股。
最佳答案
您应该避免将同步网络请求视为瘟疫。它有两个主要问题:
- 如果不是从不同的线程调用,该请求会阻塞您的 UI,这对于高质量的应用程序来说是大忌(嗯,对于任何应用程序来说都是如此)
- 除非该请求本身出错,否则无法取消该请求
我建议您使用一些编写良好的网络请求库,例如 Alamofire或AFNetworking 。对于 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/