ios – Swift 2上的同步URL请求

前端之家收集整理的这篇文章主要介绍了ios – Swift 2上的同步URL请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码here做同步请求的一个URL在Swift 2.
  1. func send(url: String,f: (String)-> ()) {
  2. var request = NSURLRequest(URL: NSURL(string: url)!)
  3. var response: NSURLResponse?
  4. var error: NSErrorPointer = nil
  5. var data = NSURLConnection.sendSynchronousRequest(request,returningResponse: &response,error: error)
  6. var reply = NSString(data: data,encoding: NSUTF8StringEncoding)
  7. f(reply)
  8. }

但是NSURLConnection.sendSynchronousRequest(请求,返回响应:&响应,错误错误)的函数已被弃用,我看不到如何在Swift上执行同步请求,因为替代方法是异步的.显然,苹果不推荐使用唯一可以同步进行的功能.

我怎样才能做到这一点?

解决方法

有一个原因背后贬低 – 没有任何用处.您应该避免同步网络请求作为瘟疫.它有两个主要问题,只有一个优点(它很容易使用,但不是异步的)

>请求阻止您的UI,如果不是从不同的线程调用,但如果这样做,为什么不使用异步处理程序?
>除了自己的错误之外,没有办法取消该请求

而不是这样,只需使用异步请求:

  1. NSURLConnection.sendAsynchronousRequest(request,queue: queue,completionHandler:{ (response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
  2.  
  3. // Handle incoming data like you would in synchronous request
  4. var reply = NSString(data: data,encoding: NSUTF8StringEncoding)
  5. f(reply)
  6. })

iOS9弃用

由于在iOS9中,这种方法已被弃用,建议您使用NSURLSession:

  1. let session = NSURLSession.sharedSession()
  2. session.dataTaskWithRequest(request) { (data,response,error) -> Void in
  3.  
  4. // Handle incoming data like you would in synchronous request
  5. var reply = NSString(data: data,encoding: NSUTF8StringEncoding)
  6. f(reply)
  7. }

猜你在找的iOS相关文章